सॉकेट और वेबसोकेट के बीच अंतर?


178

मैं वेब ऐप बना रहा हूं जिसे सॉकेट कनेक्शन का उपयोग करके किसी अन्य एप्लिकेशन के साथ संचार करने की आवश्यकता है। यह मेरे लिए नया क्षेत्र है, इसलिए यह सुनिश्चित करना चाहते हैं कि सॉकेट वेबसोकेट से भिन्न हो । ऐसा लगता है कि वे केवल वैचारिक रूप से समान हैं।

यह पूछने के कारण कि शुरू में मैं अपनी परियोजना के लिए नींव के रूप में Django का उपयोग करने की योजना बना रहा था, लेकिन SO पोस्ट में मैं ऊपर से जुड़ा हुआ हूं, यह बहुत स्पष्ट है कि वेबसोकेट संभव नहीं हैं (या कम से कम विश्वसनीय नहीं है, यहां तक ​​कि django-websockets जैसी किसी चीज़ के साथ भी ) पसंदीदा Django सेटअप (mod_wsgi के साथ अपाचे) का उपयोग कर। फिर भी मुझे अन्य पोस्ट मिली हैं जो सर्वर के होस्टनाम को हथियाने के रूप में सरल रूप से कुछ के लिए पायथन के सॉकेट मॉड्यूल को आयात करते हैं

इसलिए:

  • क्या वे वास्तव में अलग हैं?
  • क्या किसी परियोजना के लिए Django का उपयोग न करने का कोई कारण है जो किसी बाहरी सर्वर के साथ सॉकेट कनेक्शन स्थापित करने पर निर्भर करता है?

जवाबों:


141

अपने सवालों के जवाब देने के लिए।

  1. हालांकि वे इसी तरह की बातों को प्राप्त (सामान्य रूप में), हाँ , वे कर रहे हैं वास्तव में अलग। WebSockets आम तौर पर एक प्रोटोकॉल के लिए इसी तरह के ऊपर अनुप्रयोग सर्वर से कनेक्ट करने के ब्राउज़र से चलाने HTTP कि अधिक रन टीसीपी / आईपी । इसलिए वे मुख्य रूप से वेब एप्लिकेशन के लिए होते हैं जिन्हें इसके सर्वर के लिए स्थायी कनेक्शन की आवश्यकता होती है। दूसरी ओर, सादे सॉकेट अधिक शक्तिशाली और सामान्य हैं। वे TCP / IP पर चलते हैं लेकिन वे ब्राउज़र या HTTP प्रोटोकॉल तक सीमित नहीं हैं । उनका उपयोग किसी भी प्रकार के संचार को लागू करने के लिए किया जा सकता है।
  2. नहीं, कोई कारण नहीं है।

128
WebSockets HTTP के समान नहीं हैं। वे कुछ फ्रेमिंग और एक HTTP- संगत हैंडशेक के साथ सामान्य सॉकेट हैं। HTTP- संगत हैंडशेक केवल उसी पोर्ट पर WebSocket कनेक्शन की अनुमति देने के लिए है जिस पर एक वेबसर्वर चल रहा है (इसलिए वेबसर्वर उन्हें आगे बढ़ा सकता है), लेकिन एक बार कनेक्शन स्थापित हो जाने के बाद, वेबसर्वर लूप में नहीं होता है। WebSockets ब्राउज़र क्लाइंट तक सीमित नहीं है। Libwebsocket देखें जिसमें गैर-ब्राउज़र क्लाइंट और सर्वर दोनों हैं।
कांकाका

14
ठीक है। मैं देख रहा हूँ ... चूँकि मैं इस स्वीकृत उत्तर को नहीं हटा सकता, इसलिए मैं आपसे इसे सही जानकारी के साथ संपादित करने के लिए कहूँगा। धन्यवाद!
पाब्लो सांता क्रूज़

2
आप वेबसोकेट क्लाइंट बना सकते हैं और उनका उपयोग ब्राउज़रों के बाहर कर सकते हैं। वेबसैट प्रोटोकॉल HTTP 1.1 "वेबसोकेट" के अपग्रेड कनेक्शन के साथ है।
रोजर एफ। गे

2
@ घुग्गी नप। एक छोटा सा फ्रेमिंग है: tools.ietf.org/html/rfc6455#section-5 (छोटे संदेशों के लिए 2 बाइट्स)।
कनका

2
@NiCkNewman यह वास्तव में एक अच्छा अलग सवाल है। फ़्रेमिंग ओवरहेड न्यूनतम है और समस्या नहीं है। MMO नेटवर्किंग के लिए WebSockets के साथ समस्या दो-गुना है: यह केवल क्लाइंट सर्वर है, और यह TCP (स्ट्रीम आधारित) है। अच्छे MMO नेटवर्किंग प्रदर्शन के लिए आपको प्रत्यक्ष पीयर-टू-पीयर नेटवर्किंग की आवश्यकता होती है और आपको डेटाग्राम की आवश्यकता होती है (प्रत्येक पैकेट प्राप्त करने की तुलना में लगातार कम विलंबता अधिक महत्वपूर्ण है)। अच्छी खबर यह है कि WebRTC DataChannel में ये दोनों गुण हैं इसलिए यह अंतर को भरना शुरू कर देगा और ब्राउज़र में पूर्ण AAA MMO गेमिंग की अनुमति देगा।
कांकाका

21

उनके कार्यान्वयन में वेबस्कॉकेट सॉकेट का उपयोग करते हैं। वेबसोकेट एक मानक प्रोटोकॉल (अब अंतिम कॉल में, लेकिन अभी तक अंतिम नहीं) पर आधारित हैं जो एक कनेक्शन "हैंडशेक" और संदेश "फ्रेम" को परिभाषित करता है। दोनों पक्ष एक कनेक्शन को पारस्परिक रूप से स्वीकार करने के लिए हैंडशेक प्रक्रिया से गुजरते हैं और फिर संदेशों को आगे और पीछे पारित करने के लिए मानक संदेश प्रारूप ("फ्रेम") का उपयोग करते हैं।

मैं एक ढांचा विकसित कर रहा हूं जो आपको स्थापित सॉफ्टवेयर के साथ मशीन से सीधे संवाद करने की अनुमति देगा यह आपके उद्देश्य के अनुरूप हो सकता है। आप चाहें तो मेरे ब्लॉग को फॉलो कर सकते हैं: http://highlevellogic.blogspot.com/2011/09/websocket-server-demonformation_26.html


11

आपको WebSockets (या कुछ इसी तरह के प्रोटोकॉल मॉड्यूल जैसे Flash प्लगइन द्वारा समर्थित) का उपयोग करना होगा क्योंकि एक सामान्य ब्राउज़र एप्लिकेशन बस एक शुद्ध टीसीपी सॉकेट नहीं खोल सकता है।

Socket.IOमॉड्यूल उपलब्ध के लिए node.jsएक बहुत मदद कर सकते हैं, लेकिन ध्यान दें कि यह है नहीं अपने आप में एक शुद्ध WebSocket मॉड्यूल।

यह वास्तव में एक और अधिक सामान्य संचार मॉड्यूल है जो विभिन्न अन्य नेटवर्क प्रोटोकॉल के शीर्ष पर चल सकता है, जिसमें वेब पॉकेट और फ्लैश सॉकेट शामिल हैं।

इसलिए यदि आप Socket.IOसर्वर एंड पर उपयोग करना चाहते हैं तो आपको उनके क्लाइंट कोड और ऑब्जेक्ट का भी उपयोग करना होगा। आप सर्वर से आसानी से कच्चे WebSocketकनेक्शन नहीं कर सकते socket.ioक्योंकि आपको उनके संदेश प्रोटोकॉल का अनुकरण करना होगा।


11

WebSocket, HTTP की तरह ही TCP प्रोटोकॉल पर एक और एप्लीकेशन लेवल प्रोटोकॉल है।

कुछ स्निपेट्स <स्प्रिंग इन एक्शन 4> नीचे उद्धृत किया गया है, आशा है कि यह आपको वेबस्कॉर्ट को बेहतर ढंग से समझने में मदद कर सकता है।

अपने सबसे सरल रूप में, एक वेबसकेट केवल दो अनुप्रयोगों के बीच एक संचार चैनल है (जरूरी नहीं कि एक ब्राउज़र शामिल हो) ... किसी भी प्रकार के अनुप्रयोगों के बीच WebSocket संचार का उपयोग किया जा सकता है , लेकिन WebSocket का सबसे आम उपयोग एक के बीच संचार की सुविधा के लिए है सर्वर अनुप्रयोग और एक ब्राउज़र-आधारित अनुप्रयोग।


2

अपने प्रश्न (बी) के बारे में, ध्यान रखें कि वेबसोकेट विनिर्देश को अंतिम रूप नहीं दिया गया है। W3C के अनुसार :

कार्यान्वयनकर्ताओं को पता होना चाहिए कि यह विनिर्देश स्थिर नहीं है।

व्यक्तिगत रूप से मैं Websockets को वर्तमान में उपयोग करने के लिए बहुत खून बह रहा किनारे के संबंध में मानता हूं। हालांकि मैं शायद उन्हें एक या एक साल में उपयोगी पाऊंगा।


अब 9 साल बाद क्या होगा?
वेनरिक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.