दूसरों से कुछ महान जवाब जो बहुत सारी जमीन को कवर करते हैं। यहाँ थोड़ा अतिरिक्त है।
Java Applets, Flash या Silverlight जैसे प्लगइन्स पर WebSockets का एकमात्र लाभ यह है कि WebSockets मूल रूप से ब्राउज़र में निर्मित होते हैं और प्लगइन्स पर भरोसा नहीं करते हैं।
यदि आपके द्वारा इसका मतलब यह है कि आप सॉकेट कनेक्शन स्थापित करने के लिए जावा एप्लेट्स, फ्लैश, या सिल्वरलाइट का उपयोग कर सकते हैं, तो हाँ, यह संभव है। हालाँकि आप यह नहीं देखते हैं कि प्रतिबंधों के कारण वास्तविक दुनिया में भी अक्सर तैनात किया जाता है।
उदाहरण के लिए, बिचौलिये उस यातायात को बंद और कर सकते हैं। WebSocket मानक को मौजूदा HTTP इन्फ्रास्ट्रक्चर के साथ संगत करने के लिए डिज़ाइन किया गया था और इसलिए फायरवॉल और प्रॉक्सीज़ जैसे बिचौलियों द्वारा हस्तक्षेप किए जाने की संभावना कम है।
इसके अलावा, WebSocket समर्पित पोर्ट की आवश्यकता के बिना पोर्ट 80 और 443 का उपयोग कर सकता है, फिर से मौजूदा HTTP इन्फ्रास्ट्रक्चर के साथ संभव के रूप में प्रोटोकॉल डिज़ाइन के लिए धन्यवाद।
उन सॉकेट विकल्प (जावा, फ्लैश और सिल्वरलाइट) को क्रॉस-ऑरिजिन आर्किटेक्चर में सुरक्षित रूप से उपयोग करना मुश्किल है। इस प्रकार लोग अक्सर उन्हें क्रॉस-ऑरिजनल उपयोग करने का प्रयास करते हैं, यह सुरक्षित रूप से करने के प्रयास में जाने के बजाय असुरक्षा को सहन करेंगे।
उन्हें अतिरिक्त "गैर-मानक" पोर्ट खोलने की आवश्यकता हो सकती है (कुछ प्रशासकों को ऐसा करने के लिए घृणा होती है) या नीति फ़ाइलों को प्रबंधित करने की आवश्यकता होती है।
संक्षेप में, सॉकेट कनेक्टिविटी के लिए जावा, फ्लैश, या सिल्वरलाइट का उपयोग करना काफी समस्याग्रस्त है, जिसे आप अक्सर गंभीर आर्किटेक्चर में तैनात नहीं देखते हैं। फ्लैश और जावा में संभवतः कम से कम 10 वर्षों तक यह क्षमता रही है, और अभी तक यह प्रचलित नहीं है।
WebSocket मानक एक नए दृष्टिकोण के साथ शुरू करने में सक्षम था, उन प्रतिबंधों को ध्यान में रखते हुए, और उम्मीद है कि उनसे कुछ सबक सीखे।
जब कुछ वेबस्केट कनेक्टिविटी स्थापित नहीं की जा सकती (जैसे कि एक पुराने ब्राउज़र में चलने पर या जब कोई मध्यस्थ हस्तक्षेप करता है) तो कुछ वेबसॉकेट कार्यान्वयन फ़्लैश (या संभवतः सिल्वरलाइट और / या जावा) का उपयोग करते हैं।
जबकि उन स्थितियों के लिए किसी प्रकार की कमबैक रणनीति स्मार्ट है, यहां तक कि आवश्यक है, फ्लैश एट अल का उपयोग करने वाले अधिकांश ऊपर वर्णित कमियां से पीड़ित होंगे। इसका उस तरह से होना जरूरी नहीं है - फ्लैश, सिल्वरलाइट, आदि का उपयोग करके सुरक्षित क्रॉस-ऑरिजिनल सक्षम कनेक्शन प्राप्त करने के लिए वर्कअराउंड हैं, लेकिन ज्यादातर कार्यान्वयन ऐसा नहीं करेंगे क्योंकि यह आसान नहीं है।
उदाहरण के लिए, यदि आप क्रॉस-ऑरिजनल कनेक्शन के लिए वेबस्केट पर भरोसा करते हैं, तो यह ठीक काम करेगा। लेकिन अगर आप एक पुराने ब्राउज़र या फ़ायरवॉल / प्रॉक्सी में हस्तक्षेप करते हैं और फ्लैश पर भरोसा करते हैं, तो कहिए, आपके कमबैक के रूप में, आपको वही क्रॉस-ऑरिजिन कनेक्शन करना मुश्किल होगा। जब तक आप सुरक्षा के बारे में परवाह नहीं करते हैं, निश्चित रूप से।
इसका मतलब है कि यह मुश्किल है कि एक एकल एकीकृत वास्तुकला देशी और गैर-देशी कनेक्शन के लिए काम करता है, जब तक कि आप काफी काम में लगाने के लिए तैयार नहीं होते हैं या एक रूपरेखा के साथ नहीं जाते हैं जिसने इसे अच्छी तरह से किया है। एक आदर्श वास्तुकला में, आप ध्यान नहीं देंगे कि कनेक्शन देशी थे या नहीं; आपकी सुरक्षा सेटिंग्स दोनों मामलों में काम करेंगी; आपकी क्लस्टरिंग सेटिंग अभी भी काम करेगी; आपकी क्षमता योजना अभी भी आयोजित होगी; और इसी तरह।
Http स्ट्रीमिंग पर WebSockets का एकमात्र लाभ यह है कि आपको प्राप्त आंकड़ों को "समझने" और पार्स करने का प्रयास नहीं करना पड़ता है।
यह एक HTTP स्ट्रीम खोलने और आपके डेटा के मिनट, घंटे, या लंबे समय तक प्रवाह के रूप में वापस बैठने जितना आसान नहीं है। विभिन्न ग्राहक अलग तरह से व्यवहार करते हैं और आपको इसका प्रबंधन करना होता है। उदाहरण के लिए कुछ क्लाइंट डेटा को बफर करेंगे और एप्लिकेशन को तब तक जारी नहीं करेंगे जब तक कि कुछ सीमा पूरी नहीं हो जाती। इससे भी बदतर, कुछ कनेक्शन बंद होने तक आवेदन को डेटा पास नहीं करेंगे।
इसलिए यदि आप ग्राहक को कई संदेश भेज रहे हैं, तो संभव है कि क्लाइंट एप्लिकेशन को डेटा प्राप्त न हो, जब तक कि 50 संदेश लायक डेटा प्राप्त न हो, उदाहरण के लिए। यह बहुत वास्तविक समय नहीं है।
जबकि WebSocket उपलब्ध नहीं होने पर HTTP स्ट्रीमिंग एक व्यवहार्य विकल्प हो सकता है, यह एक रामबाण नहीं है। इसे वास्तविक दुनिया की परिस्थितियों में वेब के बुरे क्षेत्रों में मजबूत तरीके से काम करने के लिए एक अच्छी समझ की आवश्यकता है।
क्या कोई अन्य महत्वपूर्ण अंतर है जो मुझे याद आ रहा है?
एक और बात है जिसका किसी ने अभी तक उल्लेख नहीं किया है, इसलिए मैं इसे लाऊंगा।
WebSocket प्रोटोकॉल को उच्च-स्तरीय प्रोटोकॉल के लिए एक परिवहन परत के रूप में डिज़ाइन किया गया था। जब आप JSON संदेश भेज सकते हैं या क्या नहीं सीधे एक WebSocket कनेक्शन पर, यह मानक या कस्टम प्रोटोकॉल भी ले जा सकता है।
उदाहरण के लिए, आप WebSocket पर AMQP या XMPP कर सकते हैं, जैसा कि लोग पहले ही कर चुके हैं। इसलिए एक ग्राहक एएमक्यूपी ब्रोकर से संदेश प्राप्त कर सकता है जैसे कि वह सीधे ब्रोकर से जुड़ा हो (और कुछ मामलों में यह है)।
या यदि आपके पास कुछ कस्टम प्रोटोकॉल के साथ एक मौजूदा सर्वर है, तो आप उस WebSocket पर परिवहन कर सकते हैं, इस प्रकार उस बैक-एंड सर्वर को वेब तक बढ़ा सकते हैं। अक्सर एक मौजूदा एप्लिकेशन जिसे एंटरप्राइज़ में बंद कर दिया गया है, वह किसी भी बैक-एंड इन्फ्रास्ट्रक्चर को बदलने के बिना, वेबस्केट का उपयोग करके इसे व्यापक बना सकता है।
(स्वाभाविक रूप से, आप वे सभी सुरक्षित रूप से विक्रेता या WebSocket प्रदाता से जांचना चाहते हैं।)
कुछ लोगों ने वेब के लिए WebSocket को TCP के रूप में संदर्भित किया है। क्योंकि जैसे टीसीपी उच्च-स्तर के प्रोटोकॉल को हस्तांतरित करता है, वैसे ही WebSocket भी करता है, लेकिन एक तरह से जो वेब इंफ्रास्ट्रक्चर के अनुकूल है।
इसलिए JSON (या जो भी) संदेश सीधे WebSocket पर भेजते समय हमेशा संभव होता है, किसी को मौजूदा प्रोटोकॉल पर भी विचार करना चाहिए। क्योंकि कई चीजों के लिए जो आप करना चाहते हैं, शायद एक प्रोटोकॉल है जो पहले से ही ऐसा करने के लिए सोचा गया है।
मुझे खेद है कि अगर मैं SO पर पहले से ही एक प्रश्न में से कई प्रश्न फिर से पूछ रहा हूं या संयोजन कर रहा हूं, लेकिन मैं इन अवधारणाओं के बारे में SO और वेब पर मौजूद सभी सूचनाओं से सही अर्थ निकालना चाहता हूं।
यह एक महान प्रश्न था, और उत्तर सभी बहुत जानकारीपूर्ण रहे हैं!