Websockets और SSE (सर्वर सेंटेड इवेंट्स) दोनों ब्राउज़रों को डेटा पुश करने में सक्षम हैं, हालांकि वे प्रतिस्पर्धा करने वाली तकनीक नहीं हैं।
Websockets कनेक्शन दोनों ब्राउज़र को डेटा भेज सकते हैं और ब्राउज़र से डेटा प्राप्त कर सकते हैं। एक आवेदन का एक अच्छा उदाहरण जो वेबस्केट का उपयोग कर सकता है वह एक चैट अनुप्रयोग है।
SSE कनेक्शन केवल ब्राउज़र को डेटा पुश कर सकते हैं। ऑनलाइन स्टॉक कोट्स, या टाइमलाइन या फीड अपडेट करने वाले ट्विटर्स एक एप्लिकेशन के अच्छे उदाहरण हैं जो एसएसई से लाभान्वित हो सकते हैं।
व्यवहार में चूंकि SSE के साथ किया जा सकता है सब कुछ Websockets के साथ भी किया जा सकता है, Websockets को बहुत अधिक ध्यान और प्यार मिल रहा है, और कई और ब्राउज़र SSE की तुलना में Websockets का समर्थन करते हैं।
हालांकि, यह कुछ प्रकार के आवेदन के लिए ओवरकिल हो सकता है, और बैकएंड को एसएसई जैसे प्रोटोकॉल के साथ लागू करना आसान हो सकता है।
इसके अलावा SSE को पुराने ब्राउज़रों में पॉलीफ़िल किया जा सकता है जो केवल जावास्क्रिप्ट का उपयोग करके मूल रूप से इसका समर्थन नहीं करते हैं। SSE पॉलीफ़िल के कुछ कार्यान्वयन मॉडर्निज़र जीथब पृष्ठ पर पाए जा सकते हैं ।
gotchas:
- एसएसई एक सीमा से अधिक से अधिक खुले कनेक्शनों से ग्रस्त है, जो विभिन्न टैब खोलने पर विशेष रूप से दर्दनाक हो सकता है क्योंकि सीमा प्रति ब्राउज़र है और बहुत कम संख्या (6) पर सेट है। इस मुद्दे को क्रोम और फ़ायरफ़ॉक्स में "W't fix" के रूप में चिह्नित किया गया है । यह सीमा ब्राउज़र + डोमेन के अनुसार है, इसका मतलब है कि आप सभी टैब के 6 SSE कनेक्शन खोल सकते हैं
www.example1.com
और अन्य 6 SSE कनेक्शन www.example2.com
(धन्यवाद फाटे) कर सकते हैं।
- केवल WS द्विआधारी डेटा और UTF-8 दोनों को प्रेषित कर सकता है, SSE UTF-8 तक सीमित है। (चाडो निही को धन्यवाद)।
- पैकेट निरीक्षण वाले कुछ एंटरप्राइज़ फ़ायरवॉल को WebSockets (सोफ़ोस XG फ़ायरवॉल, वॉचगार्ड, McAfee वेब गेटवे) से निपटने में परेशानी होती है।
HTML5Rocks में SSE के बारे में कुछ अच्छी जानकारी है। उस पेज से:
सर्वर-प्रेषित ईवेंट बनाम वेबसॉकेट
आप वेब-पॉकेट पर सर्वर-भेजे गए ईवेंट क्यों चुनेंगे? अच्छा प्रश्न।
SSEs को छाया में रखने का एक कारण यह है कि बाद में WebSockets जैसे API द्वि-दिशात्मक, पूर्ण-द्वैध संचार करने के लिए एक समृद्ध प्रोटोकॉल प्रदान करते हैं। गेम्स, मैसेजिंग एप्स और उन मामलों के लिए जहां आपको दोनों दिशाओं में रियल-टाइम अपडेट के पास की जरूरत होती है, के लिए टू-वे चैनल होना अधिक आकर्षक है। हालाँकि, कुछ परिदृश्य में डेटा क्लाइंट से भेजने की आवश्यकता नहीं है। आपको बस कुछ सर्वर एक्शन से अपडेट चाहिए। कुछ उदाहरण दोस्तों के स्टेटस अपडेट, स्टॉक टिकर, न्यूज फीड या अन्य स्वचालित डेटा पुश मैकेनिज्म होंगे (जैसे क्लाइंट-साइड वेब SQL डेटाबेस या इंडेक्सडीडीबी ऑब्जेक्ट स्टोर को अपडेट करना)। यदि आपको सर्वर पर डेटा भेजने की आवश्यकता है, तो XMLHttpRequest हमेशा एक मित्र होता है।
SSE को पारंपरिक HTTP पर भेजा जाता है। इसका मतलब है कि उन्हें काम करने के लिए एक विशेष प्रोटोकॉल या सर्वर कार्यान्वयन की आवश्यकता नहीं है। दूसरी ओर WebSockets, प्रोटोकॉल को संभालने के लिए पूर्ण-द्वैध कनेक्शन और नए वेब सॉकेट सर्वर की आवश्यकता होती है। इसके अलावा, सर्वर-सेंटेड ईवेंट्स में विभिन्न प्रकार की विशेषताएं होती हैं जो वेबस्केट में डिज़ाइन के अभाव में होती हैं जैसे कि स्वचालित पुन: संयोजन, इवेंट आईडी और मनमाने घटनाओं को भेजने की क्षमता।
TLDR सारांश:
वेबसैट पर SSE के लाभ:
- कस्टम प्रोटोकॉल के बजाय सरल HTTP पर ले जाया गया
- उन ब्राउज़र को "बैकपोर्ट" एसएसई के लिए जावास्क्रिप्ट के साथ पाली भरा जा सकता है जो अभी तक इसका समर्थन नहीं करते हैं।
- पुनः कनेक्शन और इवेंट-आईडी के लिए समर्थन में निर्मित
- सरल प्रोटोकॉल
- पैकेट निरीक्षण कर रही कॉर्पोरेट फायरवॉल से कोई परेशानी नहीं
SSE से अधिक वेबसोकेट के लाभ:
- वास्तविक समय, दो दिशात्मक संचार।
- अधिक ब्राउज़रों में मूल समर्थन
SSE के आदर्श उपयोग के मामले:
- स्टॉक टिकर स्ट्रीमिंग
- ट्विटर फीड अपडेट
- ब्राउज़र को सूचनाएं
SSE gotchas:
- कोई बाइनरी सपोर्ट नहीं
- अधिकतम खुले कनेक्शन की सीमा