2015-10-01 11 views
10

मैंने websockets के बारे में बहुत कुछ पढ़ा है और पहले से ही उन्हें अपने सिस्टम में लागू किया है। यह सवाल उनके बारे में सही तरीके से उपयोग करने के बारे में है। मैं एक अधिसूचना और चैट सिस्टम को सही तरीके से कार्यान्वित करना चाहता हूं।वेबसाइट्स अधिसूचना-/चैट- सिस्टम

अधिसूचनाओं के लिए, मेरे पास चैनल "सूचनाएं/चैनल" है और चैट के लिए, मेरे पास चैनल "चैट/चैनल" है।

क्या ये दो चैनल भी "वैश्विक" नहीं हैं? आइए मान लें कि साइट पर 1.000,000 उपयोगकर्ता हैं, इसका मतलब यह होगा कि ये सभी उपयोगकर्ता इन दो चैनलों में होंगे। जब एक अधिसूचना किसी अन्य विशिष्ट उपयोगकर्ता को भेजी जाती है, तो इसका मतलब यह होगा कि संदेश एक चैनल के माध्यम से भेजा जाता है, जहां 1.000.000 उपयोगकर्ता सदस्यता लेते हैं।

चैट संदेशों के साथ ही। मान लें कि कोई उपयोगकर्ता किसी अन्य उपयोगकर्ता से चैट करना चाहता है। प्रत्येक संदेश उस चैनल को पास करेगा जहां सभी उपयोगकर्ता सब्सक्राइब किए जाते हैं और अंत में, लक्षित उपयोगकर्ता को पास प्राप्त रिसीवर_आईडी के कारण संदेश प्राप्त होगा।

उचित अधिसूचना चैनल और "निजी" चैट चैनल कैसे प्रबंधित करें?

क्या यह प्रत्येक उपयोगकर्ता को "उप चैनल" (समूह चैट और नोटिफिकेशन, ईजी "नोटिफिकेशन/चैनल/उपयोगकर्ता 1") बनाने के लिए और अधिक सक्षम और सुरक्षित होगा, या बस सभी उपयोगकर्ताओं को एक बड़े चैनल में जाने दें?

+0

कोई विचार नहीं? मुझे लगता है कि वेबसाइकिलों की बात आने पर हर किसी को यह सोचना चाहिए था, इसलिए ऐसा करने के लिए एक अनुशंसित तरीका होना चाहिए। – user3746259

+0

क्या आप वास्तव में सभी 1 एम उपयोगकर्ताओं को एक ही समूह में चैट करना चाहते हैं? अन्यथा, आपको स्पष्ट रूप से चीजों को उप-समूहों में विभाजित करने की आवश्यकता है। अधिसूचनाओं के साथ ही। प्रदर्शन के प्रभाव के अलावा, सभी उपयोगकर्ताओं को गोपनीयता कारणों से सभी अधिसूचनाएं प्राप्त नहीं करनी चाहिए। – gzost

+0

मेरा मतलब एक बड़े समूह में चैट या अधिसूचनाएं भेजने का मतलब नहीं था - मेरा मतलब था एक बड़े चैनल में और उन्हें विशिष्ट उपयोगकर्ताओं को संबोधित करना। – user3746259

उत्तर

1

व्यक्तिगत रूप से, जिस तरह से मैं इसे संबोधित करेंगे इस प्रकार है:

प्रत्येक उपयोगकर्ता 1 WebSocket कनेक्शन है। यह कनेक्शन सभी डेटा पास करने के लिए उपयोग किया जाएगा। मैं डेटा को आगे और आगे पास करने के लिए एक जेसन प्रारूप का उपयोग करूंगा। मैं संदेश के प्रकार को इंगित करने के लिए जेसन स्ट्रक्चर में एक फ़ील्ड का उपयोग करता हूं, और चैट रूम आईडी जैसी अन्य जानकारी।

{ 
    "type":"chat", 
    "chatID":4756, 
    "message":"Hello, world!" 
} 

क्लाइंट-साइड जावास्क्रिप्ट तर्क:

{ 
    "type":"notification", 
    "message":"New Mail" 
} 

एक चैट संदेश कुछ इस तरह होगा: तो, अगर मैं एक सूचना भेजने के लिए चाहता था, यह इस (वास्तव में सरल उदाहरण) की तरह कुछ हो सकता है संदेश का प्रकार निर्धारित करेगा और इसके साथ क्या करना है। सर्वर-साइड तर्क यह निर्धारित करेगा कि उपयोगकर्ता निर्दिष्ट चैट रूम में "सब्सक्राइब किया गया है", तो यह पता चलेगा कि कौन से चैट संदेश उपयोगकर्ता को भेजना है। यह इसे सुरक्षित रखेगा, इसलिए आप उन उपयोगकर्ताओं को चैट संदेश नहीं भेज रहे हैं, जिन्होंने कमरे आईडी की सदस्यता नहीं ली है।

मुझे बताएं कि आपको इस विधि पर कोई स्पष्टीकरण की आवश्यकता है या नहीं।

+0

अच्छा दृष्टिकोण, लेकिन जैसा कि मैंने ऊपर पढ़ा है, मैं अधिसूचनाओं और निजी चैट चैनलों के लिए प्रति उपयोगकर्ता चैनल बनाने के निष्कर्ष पर आया जहां विशिष्ट उपयोगकर्ता समूह चैट कर सकते हैं। यानी, मुझे लगता है कि एक बेहतर पृथक मॉडल है। – user3746259

+0

* यह आपके से अलग है क्योंकि आपके पास प्रति उपयोगकर्ता केवल एक चैनल होगा और कोई अलग चैट चैनल नहीं होगा। सुरक्षा जांच को उस समय सर्वर सर्वर पर भी किया जा सकता है जब उपयोगकर्ता एक चैनल – user3746259

+0

** की सदस्यता लेने का प्रयास करता है और आप सीधे जेएस का उपयोग करके क्लाइंट से क्लाइंट को संदेश भेजने के लिए दृष्टिकोण का उपयोग नहीं कर सकते - लेकिन मुझे लगता है कि यह नहीं है इतना बुरा है क्योंकि सभी पक्षों में सर्वर साइड चेक हमेशा किया जाना चाहिए – user3746259

संबंधित मुद्दे