Server-Sent Events का उपयोग करते समय क्लाइंट में रुचि रखने वाली विभिन्न घटनाओं को प्राप्त करने के लिए एकाधिक कनेक्शन स्थापित करना चाहिए, या एक कनेक्शन होना चाहिए और क्लाइंट इंगित करता है कि यह एक अलग चैनल के माध्यम से क्या रुचि रखता है? बाद में आईएमओ अधिक बेहतर लगता है हालांकि कुछ लोगों के लिए यह क्लाइंट कोड अधिक जटिल बना सकता है। Spec नामित घटनाओं (एक विशेष विषय से संबंधित घटनाओं) का समर्थन करता है, जो मुझे बताता है कि सर्वर-प्रेषित घटना कनेक्शन को सभी घटनाओं के लिए एकल चैनल के रूप में उपयोग किया जाना चाहिए।प्रति ऐप केवल एक इवेंटसोर्स ऑब्जेक्ट होना चाहिए?
निम्नलिखित कोड पहले परिदृश्य जहां एक से अधिक सर्वर-से भेजे घटना कनेक्शन शुरू कर रहे हैं दिखाता है:
var EventSource eventSource1 = new EventSource("events/topic1");
eventSource1.addEventListener('topic1', topic1Listener, false);
var EventSource eventSource2 = new EventSource("events/topic2");
eventSource2.addEventListener('topic2', topic2Listener, false);
eventSource1 "topic1" घटनाओं प्राप्त होगा और eventSource2 "topic2" घटनाओं प्राप्त होगा। जबकि यह बहुत सीधे आगे है यह भी एक हैंग करने के साथ बहुत अक्षम है प्राप्त प्रत्येक विषय आप में रुचि रखते हैं के लिए होने वाली
विकल्प निम्नलिखित की तरह कुछ है:।
var EventSource eventSource3 = new EventSource("/events?id=1234")
eventSource3.addEventListener('topic3', topic3Listener, false);
eventSource3.addEventListener('topic4', topic4Listener, false);
var subscription = new XMLHttpRequest();
subscription.open("PUT", "/events/topic3?id=1234", true);
subscription.send();
इस उदाहरण में एक भी EventSource होगा मौजूद है और किसी विशेष घटना में रुचि सर्वर-प्रेषित ईवेंट कनेक्शन और आईडी पैरा द्वारा सहसंबंधित पंजीकरण के साथ एक अलग अनुरोध द्वारा निर्दिष्ट किया जाएगा। विषय 3 लिस्टर को "विषय 3" घटनाएं और विषय 4 प्राप्तकर्ता नहीं मिलेगा। जबकि थोड़ा और कोड की आवश्यकता होती है, लाभ यह है कि केवल एक ही कनेक्शन बनाया जाता है, लेकिन घटनाओं को अभी भी पहचाना जा सकता है और अलग-अलग संभाला जा सकता है।
वेब पर ऐसे कई उदाहरण हैं जो नामित घटनाओं का उपयोग दिखाते हैं, लेकिन ऐसा लगता है कि ईवेंट नाम (या विषय) अग्रिम में ज्ञात हैं इसलिए क्लाइंट के साथ रुचि पंजीकृत करने की कोई आवश्यकता नहीं है (example)। हालांकि मुझे अभी तक कई इवेंटसोर्स ऑब्जेक्ट्स दिखाने का एक उदाहरण दिखाई नहीं दे रहा है, मैंने एक विशेष विषय में रुचि पंजीकृत करने के लिए एक अलग अनुरोध का उपयोग करके क्लाइंट को एक उदाहरण भी नहीं देखा है, जैसा कि मैं ऊपर कर रहा हूं। Spec की मेरी व्याख्या मुझे विश्वास दिलाती है कि किसी निश्चित विषय (या घटना का नाम) में रुचि का संकेत पूरी तरह से डेवलपर तक है और यह क्लाइंट के साथ स्थाई रूप से किया जा सकता है, जो घटनाओं के नामों को जानने के लिए या क्लाइंट के साथ गतिशील रूप से सर्वर को चेतावनी दी जाती है कि यह विशेष घटनाओं को प्राप्त करने में रूचि रखता है।
मुझे इस विषय पर अन्य लोगों के विचारों को सुनने में बहुत दिलचस्पी होगी। एनबी: मैं आमतौर पर जावा देव हूं इसलिए कृपया मेरे औसत जेएस कोड को क्षमा करें .. :)
आप अपने घटना धारा में सभी ईवेंट के नाम पर उपयोग नहीं कर सकते, इसके बजाय आप और "संदेश" घटना के लिए सुन सकते हैं event.data में आप अपने topicId और अतिरिक्त जानकारी सांकेतिक शब्दों में बदलना कर सकते हैं – 4esn0k
हाँ ज़रूर, लेकिन इसका मतलब यह होगा कि मुझे ऐसे डेटा को पेलोड में एन्कोड करने की आवश्यकता है जो वास्तव में समझ में नहीं आता है जब संदेश पहचान पहले से ही spec के डेटा फ़्रेमिंग का हिस्सा है। –
+1! बहुत अच्छा सवाल है। आपने आखिर में क्या किया ? मैं दूसरे दृष्टिकोण के साथ जाने की भी सोच रहा हूं। अगर आप साझा करते हैं कि आप इसके साथ किसी भी समस्या में भाग गए हैं तो सराहना करेंगे। – brainOverflow