WebSocket कई आधुनिक वेब अनुप्रयोगों में एक अभिन्न तकनीक है। यदि आप वेब के लिए कोड लिखते हैं, तो आपने शायद पहले इस शब्द को सुना होगा, लेकिन शायद आप सुनिश्चित नहीं हैं कि यह वास्तव में क्या है या इसका उपयोग कैसे करना है। सौभाग्य से, WebSocket एक जटिल अवधारणा नहीं है, और आप इसकी एक बुनियादी समझ बहुत जल्दी प्राप्त कर सकते हैं।
वेबसाकेट क्या है?
दुर्भाग्य से, WebSocket उन नामों में से एक है जो पहली नज़र में समझ में नहीं आता है। WebSocket वास्तव में a. का नाम है संचार प्रोटोकॉल जो क्लाइंट और वेब सर्वर के बीच द्विदिश संचार की अनुमति देता है।
सरल शब्दों में, वेबसॉकेट एक ऐसी तकनीक है जो क्लाइंट और सर्वर को एक कनेक्शन बनाने की अनुमति देती है जहां कोई भी पक्ष किसी भी समय दूसरे को संदेश भेज सकता है।
यह एक नियमित HTTP कनेक्शन से अलग है, जहां क्लाइंट को एक अनुरोध शुरू करना चाहिए, और उसके बाद ही सर्वर एक प्रतिक्रिया भेज सकता है। वास्तव में, WebSocket HTTP से पूरी तरह से अलग संचार प्रोटोकॉल है जिसे HTTP-संगत होने के लिए डिज़ाइन किया गया था। जब कोई क्लाइंट एप्लिकेशन वेबसॉकेट कनेक्शन शुरू करना चाहता है, तो उसे इसका उपयोग करने की आवश्यकता होती है
HTTP अपग्रेड मैकेनिज्म WebSocket प्रोटोकॉल पर स्विच करने के लिए।इस बिंदु पर, आप सोच रहे होंगे: "प्रोटोकॉल केवल नियमों का एक सेट है, आप इसे कोड के लिए कैसे उपयोग कर सकते हैं?"।
लापता टुकड़ा कुछ कहा जाता है a प्रोटोकॉल स्टैक. अनिवार्य रूप से, प्रोटोकॉल का समर्थन करने वाले उपकरणों में हार्डवेयर और सॉफ़्टवेयर निर्मित होते हैं जो आपको प्रोटोकॉल का उपयोग करके संचार करने वाले एप्लिकेशन लिखने की अनुमति देते हैं। प्रोटोकॉल का उपयोग सीधे कुछ भी बनाने के लिए नहीं किया जाता है।
वेबसाकेट क्यों बनाया गया था?
WebSocket की आवश्यकता को स्पष्ट करने के लिए, इंटरनेट पर चैट करने के पीछे के तंत्र पर विचार करें।
कोई व्यक्ति अपने डिवाइस से चैट सर्वर को एक संदेश भेजता है, लेकिन सर्वर को अभी भी उस संदेश को आपके डिवाइस पर भेजना होगा, इससे पहले कि आप उसे पढ़ सकें। यदि सर्वर HTTP का उपयोग करता है, तो सर्वर उस संदेश को सीधे आपको अग्रेषित नहीं कर सकता, क्योंकि सर्वर अनुरोध आरंभ नहीं कर सकता है।
HTTP के साथ इस समस्या को ठीक करने के कुछ तरीके हैं। क्लाइंट के लिए सर्वर को लगातार अपडेट अनुरोध भेजने का एक तरीका है, और सर्वर प्रतिक्रिया में उसके पास मौजूद किसी भी डेटा को अग्रेषित करेगा। इस तकनीक को मतदान कहा जाता है, और प्रत्येक अनुरोध को मतदान कहा जाता है। मतदान के दो प्रकार हैं: लंबा मतदान और छोटा मतदान।
लंबे पोलिंग वैरिएंट का उपयोग करने का मतलब है कि क्लाइंट डिवाइस लगातार सर्वर से पूछ रहा है कि क्या कोई नया संदेश उपलब्ध है। यदि नए संदेश उपलब्ध हैं, तो सर्वर संदेशों को प्रतिक्रिया के रूप में भेजेगा। यदि नहीं, तो सर्वर प्रतिक्रिया देने में देरी करेगा और कनेक्शन को तब तक खुला रखेगा जब तक कि उसके पास वापस भेजने के लिए डेटा न हो, और फिर क्लाइंट तुरंत एक नया अनुरोध करेगा।
यह तकनीक अक्षम है, क्योंकि HTTP को इस तरह उपयोग करने के लिए डिज़ाइन नहीं किया गया था। यह छोटे पैमाने पर पर्याप्त रूप से प्रदर्शन करता है, लेकिन प्रत्येक HTTP अनुरोध में अतिरिक्त डेटा भेजना शामिल है हेडर, और इसके परिणामस्वरूप सर्वर पर काफी बढ़ा हुआ लोड होता है जब कई क्लाइंट मतदान कर रहे होते हैं यह।
यहां एक आरेख है जो लंबे मतदान को दर्शाता है:
छोटा मतदान संस्करण और भी कम कुशल है। शॉर्ट पोलिंग में, सर्वर नया डेटा आने तक कनेक्शन को खुला नहीं रखता है, जिसका अर्थ है कि क्लाइंट को सर्वर को निश्चित, बहुत कम अंतराल पर पोलिंग करते रहना होगा।
HTTP में द्विदिश संचार के लिए एक अन्य तकनीक को स्ट्रीमिंग कहा जाता है।
स्ट्रीमिंग में, पहला अनुरोध भेजे जाने के बाद, सर्वर कनेक्शन को अनिश्चित काल तक खुला रखता है, क्लाइंट को निरंतर आंशिक प्रतिक्रिया के रूप में नई जानकारी भेजता है।
स्ट्रीमिंग परिणामों का उपयोग मतदान की तुलना में एक छोटे डेटा ओवरहेड और सर्वर लोड में होता है, क्योंकि आदर्श रूप से क्लाइंट केवल एक HTTP अनुरोध करता है। दुर्भाग्य से, स्ट्रीमिंग कुछ शर्तों के तहत समस्याएँ पैदा करती है क्योंकि ब्राउज़र और नेटवर्क मध्यस्थ (जैसे प्रॉक्सी) अक्सर इसे संभालने का प्रयास करते हैं आंशिक प्रतिक्रियाएँ एक बड़े HTTP प्रतिसाद (जो सामान्य HTTP व्यवहार है) के टूटे हुए टुकड़ों के रूप में, अलग संदेशों के बजाय उनका इरादा था होना।
इन मुद्दों को हल करने के लिए WebSocket बनाया गया था। HTTP के विपरीत, WebSocket को विशेष रूप से द्विदिश संचार के लिए डिज़ाइन किया गया था। वेबसॉकेट के साथ, एक बार कनेक्शन खोलने के बाद, क्लाइंट और सर्वर मतदान या स्ट्रीमिंग के मुद्दों के बिना संदेश आगे और आगे भेज सकते हैं।
WebSocket के लिए मामलों का उपयोग करें
वेबसाकेट बहुत अच्छा है, लेकिन इसका मतलब यह नहीं है कि इसे हर जगह इस्तेमाल किया जाना चाहिए।
WebSocket को लागू करने से आपके एप्लिकेशन में जटिलता बढ़ सकती है, विशेष रूप से सर्वर साइड पर, इसलिए इसे तब तक नहीं किया जाना चाहिए जब तक आपके पास कोई अच्छा कारण न हो। यह प्रश्न पूछता है: एक अच्छा कारण कैसा दिखता है?
WebSocket उन मामलों के लिए आदर्श है जहां कम विलंबता पर लगातार द्विदिश संचार की आवश्यकता होती है। दूसरे शब्दों में, WebSocket उन अनुप्रयोगों के लिए एक लाभ प्रदान करता है जिन्हें बार-बार या बड़े पैमाने पर संवाद करने की आवश्यकता होती है। यदि संचार को रीयल-टाइम होने की आवश्यकता नहीं है या एप्लिकेशन बड़े पैमाने पर कभी नहीं बढ़ेगा, तो उस एप्लिकेशन में उपयोग के लिए मतदान या स्ट्रीमिंग पर्याप्त हो सकती है।
वेबसॉकेट के विशिष्ट उपयोग चैट एप्लिकेशन, ऑनलाइन मल्टीप्लेयर गेम, रीयल-टाइम सहयोग और अधिसूचना सॉफ़्टवेयर इत्यादि के निर्माण में हैं।
क्लाइंट साइड पर वेबसॉकेट का उपयोग कैसे करें
सर्वर-साइड पर वेबसॉकेट का उपयोग करना शामिल हो सकता है, और प्रक्रिया भाषा के आधार पर काफी भिन्न होती है (जैसे सी#, जावा, आदि) और पसंद का पुस्तकालय, इसलिए हम इसे यहां कवर नहीं करेंगे। इसके बाद, हम संक्षेप में चर्चा करेंगे कि क्लाइंट-साइड पर WebSocket का उपयोग कैसे करें।
सभी आधुनिक ब्राउज़र एक वेब एपीआई लागू करते हैं जिसे कहा जाता है वेबसॉकेट एपीआई, जो वेबसॉकेट प्रोटोकॉल के लिए ब्राउज़र का प्रोटोकॉल स्टैक है। आप इस एपीआई का उपयोग करके जावास्क्रिप्ट में वेबसॉकेट का उपयोग कर सकते हैं। एपीआई आपको वेबसॉकेट ऑब्जेक्ट बनाने की अनुमति देता है, जिसके माध्यम से आप वेबसॉकेट कनेक्शन बनाते हैं और वेबसॉकेट सर्वर से इंटरैक्ट करते हैं।
WebSocket ऑब्जेक्ट बनाने के लिए आप निम्न कोड प्रारूप का उपयोग कर सकते हैं:
उदाहरण दें सॉकेट = नया वेबसाकेट ("wss://www.example.com/socketserver", "डमी प्रोटोकॉल");
कंस्ट्रक्टर के लिए पहला तर्क उस वेबसॉकेट सर्वर का यूआरआई है जिसके साथ आप एक कनेक्शन बनाना चाहते हैं। यह हमेशा "ws" या "wss" से शुरू होगा। दूसरा तर्क वैकल्पिक है। इसका मान या तो एक स्ट्रिंग या स्ट्रिंग्स की एक सरणी है, जो आपके द्वारा समर्थित उप-प्रोटोकॉल को निर्दिष्ट करता है।
WebSocket ऑब्जेक्ट में रेडीस्टेट नामक रीड-ओनली प्रॉपर्टी होती है। इस संपत्ति तक पहुँचने से WebSocket कनेक्शन की वर्तमान स्थिति मिलती है। रेडीस्टेट के चार संभावित मान हैं: "कनेक्टिंग", "ओपन", "क्लोजिंग", और "क्लोज्ड"।
जब कोड की वह पंक्ति चलती है, तो ब्राउज़र कोशिश करेगा और निर्दिष्ट सर्वर से कनेक्ट होगा। कनेक्शन एक बार में पूरा नहीं होगा, इसलिए उदाहरण सॉकेट का रेडीस्टेट "कनेक्टिंग" होगा। कनेक्शन पूरा होने तक कोई संदेश नहीं भेजा या प्राप्त किया जा सकता है, जिस बिंदु पर तैयार राज्य का मूल्य "खुला" हो जाएगा।
उदाहरण सॉकेट ऑब्जेक्ट में एक ईवेंट श्रोता होता है (जो से भिन्न होता है) डोम घटना श्रोता) जिसे "ऑनोपेन" कहा जाता है, जो आपको कनेक्शन स्थापित होने के बाद ही आगे की कार्रवाई करने की अनुमति देता है। ऑब्जेक्ट में "भेजें" विधि भी है जो आपको सर्वर पर संदेश के रूप में स्ट्रिंग्स, ब्लॉब्स (बाइनरी डेटा), और ऐरेबफर भेजने की अनुमति देती है।
इनका एक साथ उपयोग करने का एक उदाहरण यहां दिया गया है:
exampleSocket.onopen = समारोह (प्रतिस्पर्धा) {
उदाहरण सॉकेट। भेजें ("वेबसॉकेट वास्तव में अच्छा है");
};
एपीआई आपको सर्वर द्वारा भेजे जाने वाले संदेशों पर प्रतिक्रिया करने में सक्षम होने का एक तरीका भी प्रदान करता है। यह "ऑनमेसेज" ईवेंट श्रोता के साथ किया जाता है। यहाँ एक उदाहरण है:
exampleSocket.onmessage = समारोह (प्रतिस्पर्धा) {
सांत्वना देना।लकड़ी का लट्ठा(प्रतिस्पर्धा।जानकारी);
}
इसके बजाय, आप यह भी लिख सकते हैं एक तीर समारोह:
exampleSocket.onmessage = (घटना) => { सांत्वना देनालॉग (event.data); }
एपीआई भी प्रदान करता है a बंद करना() कनेक्शन बंद करने की विधि। यहाँ यह कैसा दिखता है:
उदाहरण सॉकेट।बंद करना();
WebSocket कुशल द्विदिश संचार को सक्षम करता है
WebSocket एक द्विदिश संचार प्रोटोकॉल है। सर्वर और ब्राउज़र WebSocket का उपयोग करके संचार करने के लिए प्रोटोकॉल स्टैक लागू करते हैं। WebSocket मौजूद है क्योंकि HTTP को द्विदिश होने के लिए डिज़ाइन नहीं किया गया था। HTTP के साथ द्विदिश कनेक्शन लागू करने के तरीके हैं, लेकिन उनमें समस्याएँ हैं।
WebSocket शक्तिशाली तकनीक है, लेकिन सभी मामलों में आवश्यक नहीं है, क्योंकि यह एप्लिकेशन आर्किटेक्चर को महत्वपूर्ण रूप से जटिल कर सकता है। क्लाइंट-साइड पर WebSocket का उपयोग ब्राउज़र WebSocket API के साथ किया जाता है।