1) WebSockets प्रोटोकॉल बेहतर क्यों है?
वेबसॉकेट उन स्थितियों के लिए बेहतर है जिसमें कम-विलंबता संचार शामिल होता है विशेष रूप से क्लाइंट संदेशों के लिए कम विलंबता के लिए। क्लाइंट डेटा के लिए सर्वर के लिए आप लंबे समय से रखे गए कनेक्शन और चंक्ड ट्रांसफर का उपयोग करके काफी कम विलंबता प्राप्त कर सकते हैं। हालाँकि, यह क्लाइंट के साथ सर्वर लेटेंसी के लिए मदद नहीं करता है जिसके लिए प्रत्येक क्लाइंट को सर्वर संदेश के लिए एक नए कनेक्शन की आवश्यकता होती है।
आपका 48 बाइट HTTP हैंडशेक वास्तविक दुनिया HTTP ब्राउज़र कनेक्शन के लिए यथार्थवादी नहीं है, जहां अक्सर कई हेडर और कुकी डेटा सहित अनुरोध (दोनों दिशाओं में) के हिस्से के रूप में कई किलोबाइट डेटा भेजा जाता है। यहां क्रोम का उपयोग करने के अनुरोध / प्रतिक्रिया का एक उदाहरण दिया गया है:
उदाहरण अनुरोध (कुकी डेटा सहित 2800 बाइट्स, कुकी डेटा के बिना 490 बाइट्स):
GET / HTTP/1.1
Host: www.cnn.com
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.68 Safari/537.17
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: [[[2428 byte of cookie data]]]
उदाहरण प्रतिक्रिया (355 बाइट्स):
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 13 Feb 2013 18:56:27 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: CG=US:TX:Arlington; path=/
Last-Modified: Wed, 13 Feb 2013 18:55:22 GMT
Vary: Accept-Encoding
Cache-Control: max-age=60, private
Expires: Wed, 13 Feb 2013 18:56:54 GMT
Content-Encoding: gzip
HTTP और WebSockets दोनों में समान आकार के प्रारंभिक कनेक्शन हैंडशेक हैं, लेकिन WebSocket कनेक्शन के साथ प्रारंभिक हैंडशेक एक बार किया जाता है और फिर छोटे संदेशों में केवल 6 बाइट्स ओवरहेड (हेडर के लिए 2 और मुखौटा मूल्य के लिए 4) होते हैं। लेटेंसी ओवरहेड हेडर के आकार से बहुत अधिक नहीं है, लेकिन उन हेडर को पार्स / हैंडल / स्टोर करने के तर्क से। इसके अलावा, टीसीपी कनेक्शन सेटअप विलंबता संभवतः प्रत्येक अनुरोध के लिए आकार या प्रसंस्करण समय से बड़ा कारक है।
2) HTTP प्रोटोकॉल को अपडेट करने के बजाय इसे क्यों लागू किया गया?
बेहतर प्रदर्शन और कम विलंबता जैसे SPDY , HTTP 2.0 और QUIC को प्राप्त करने के लिए HTTP प्रोटोकॉल को फिर से इंजीनियर करने के प्रयास हैं । यह सामान्य HTTP अनुरोधों के लिए स्थिति में सुधार करेगा, लेकिन यह संभावना है कि WebSockets और / या WebRTC DataChannel में अभी भी क्लाइंट के लिए HTTP प्रोटोकॉल की तुलना में सर्वर डेटा ट्रांसफर के लिए विलंबता होगी (या इसका उपयोग ऐसे मोड में किया जाएगा जो WebSockets पर बहुत अधिक दिखता है। वैसे भी)।
अपडेट :
वेब प्रोटोकॉल के बारे में सोचने के लिए यहाँ एक रूपरेखा है:
- टीसीपी : निम्न-स्तर, द्वि-दिशात्मक, पूर्ण-द्वैध, और गारंटीकृत आदेश परिवहन परत। कोई ब्राउज़र समर्थन (प्लगइन / फ्लैश के अलावा)।
- HTTP 1.0 : अनुरोध-प्रतिक्रिया परिवहन प्रोटोकॉल TCP पर स्तरित है। क्लाइंट एक पूर्ण अनुरोध करता है, सर्वर एक पूर्ण प्रतिक्रिया देता है, और फिर कनेक्शन बंद हो जाता है। अनुरोध विधि (GET, POST, HEAD) का सर्वर पर संसाधनों के लिए विशिष्ट लेन-देन अर्थ है।
- HTTP 1.1 : HTTP 1.0 के अनुरोध-प्रतिक्रिया की प्रकृति को बनाए रखता है, लेकिन कनेक्शन को कई पूर्ण अनुरोधों / पूर्ण प्रतिक्रियाओं (प्रति अनुरोध एक प्रतिक्रिया) के लिए खुला रहने देता है। अभी भी अनुरोध और प्रतिक्रिया में पूर्ण हेडर हैं, लेकिन कनेक्शन फिर से उपयोग किया जाता है और बंद नहीं होता है। HTTP 1.1 ने कुछ अतिरिक्त अनुरोध विधियाँ (विकल्प, PUT, DELETE, TRACE, CONNECT) भी जोड़ीं, जिनमें विशिष्ट लेन-देन के अर्थ भी हैं। हालाँकि, जैसा कि HTTP 2.0 ड्राफ्ट प्रस्ताव के परिचय में नोट किया गया है , HTTP 1.1 पाइपलाइनिंग व्यापक रूप से तैनात नहीं है, इसलिए यह ब्राउज़र और सर्वर के बीच विलंबता को हल करने के लिए HTTP 1.1 की उपयोगिता को बहुत सीमित करता है।
- लंबे समय के सर्वेक्षण : HTTP (या तो 1.0 या 1.1) के लिए एक "हैक" की तरह, जहां सर्वर ग्राहक के अनुरोध पर तुरंत (या केवल हेडर के साथ आंशिक रूप से जवाब नहीं) देता है। सर्वर प्रतिक्रिया के बाद, क्लाइंट तुरंत एक नया अनुरोध भेजता है (उसी कनेक्शन का उपयोग करके यदि HTTP 1.1 से अधिक हो)।
- HTTP स्ट्रीमिंग : विभिन्न प्रकार की तकनीकें (मल्टीपार्ट / चंकड रिस्पांस) जो सर्वर को एक क्लाइंट रिक्वेस्ट के एक से अधिक रिस्पांस भेजने की अनुमति देती हैं। W3C एक MIME प्रकार का उपयोग करके सर्वर-भेजे गए ईवेंट के रूप में इसे मानकीकृत कर रहा है
text/event-stream
। ब्राउज़र एपीआई (जो वेबसॉकेट एपीआई से काफी मिलता-जुलता है) को इवेंटसोर्स एपीआई कहा जाता है।
- धूमकेतु / सर्वर धक्का : यह एक छाता शब्द है जिसमें लंबी-पोल और HTTP स्ट्रीमिंग दोनों शामिल हैं। धूमकेतु पुस्तकालय आमतौर पर क्रॉस-ब्राउज़र और क्रॉस-सर्वर समर्थन को अधिकतम करने के लिए कई तकनीकों का समर्थन करते हैं।
- WebS Pocket : एक ट्रांसपोर्ट लेयर बिल्ट-ऑन टीसीपी जो HTTP फ्रेंडली अपग्रेड हैंडशेक का उपयोग करता है। टीसीपी के विपरीत, जो एक स्ट्रीमिंग ट्रांसपोर्ट है, वेबसॉकेट एक संदेश आधारित परिवहन है: संदेश तार पर सीमांकित होते हैं और आवेदन करने के लिए वितरण से पहले पूर्ण रूप से इकट्ठे होते हैं। WebSocket कनेक्शन द्वि-दिशात्मक, पूर्ण-द्वैध और लंबे समय तक रहने वाले हैं। प्रारंभिक हैंडशेक अनुरोध / प्रतिक्रिया के बाद, कोई भी व्यवहारिक शब्दार्थ नहीं है और प्रति संदेश बहुत कम है। क्लाइंट और सर्वर किसी भी समय संदेश भेज सकते हैं और संदेश रसीद को अतुल्यकालिक रूप से संभालना चाहिए।
- SPDY : एक Google ने अधिक कुशल वायर प्रोटोकॉल का उपयोग करके HTTP का विस्तार करने का प्रस्ताव शुरू किया, लेकिन सभी HTTP शब्दार्थ (अनुरोध / प्रतिक्रिया, कुकीज़, एन्कोडिंग) को बनाए रखा। SPDY एक नया फ़्रेमिंग प्रारूप (लंबाई-पूर्वनिर्मित फ़्रेम के साथ) का परिचय देता है और नई फ़्रेमिंग परत पर HTTP अनुरोध / प्रतिक्रिया जोड़े को स्तरित करने का एक तरीका निर्दिष्ट करता है। हेडर को संपीड़ित किया जा सकता है और कनेक्शन स्थापित होने के बाद नए हेडर भेजे जा सकते हैं। ब्राउज़रों और सर्वरों में SPDY के वास्तविक विश्व कार्यान्वयन हैं।
- HTTP 2.0 : में SPDY के समान लक्ष्य हैं: HTTP शब्दार्थ को संरक्षित करते हुए HTTP विलंबता और ओवरहेड को कम करें। वर्तमान ड्राफ्ट SPDY से लिया गया है और एक अपग्रेड हैंडशेक और डेटा फ्रेमिंग को परिभाषित करता है जो हैंडशेक और फ्रेमिंग के लिए वेबसोकेट मानक के समान है। एक वैकल्पिक HTTP 2.0 ड्राफ्ट प्रस्ताव (HTTPbis-speed-mobility) वास्तव में ट्रांसपोर्ट लेयर के लिए WebSockets का उपयोग करता है और SPDY मल्टीप्लेक्सिंग और HTTP मैपिंग को WebSocket एक्सटेंशन (हैंडस्कॉक के दौरान WebSocket एक्सटेंशन से बातचीत के रूप में) जोड़ा जाता है।
- WebRTC / CU-WebRTC : ब्राउज़रों के बीच सहकर्मी से सहकर्मी कनेक्टिविटी की अनुमति देने का प्रस्ताव। यह निम्न औसत और अधिकतम विलंबता संचार को सक्षम कर सकता है क्योंकि अंतर्निहित परिवहन टीसीपी के बजाय एसडीपी / डेटाग्राम है। यह पैकेट / संदेशों के आउट-ऑफ-ऑर्डर डिलीवरी की अनुमति देता है जो गिराए गए पैकेटों के कारण विलंबता स्पाइक्स के टीसीपी मुद्दे से बचा जाता है जो सभी बाद के पैकेटों की डिलीवरी में देरी करता है (इन-ऑर्डर डिलीवरी की गारंटी देने के लिए)।
- QUIC : एक प्रयोगात्मक प्रोटोकॉल है जिसका उद्देश्य टीसीपी पर वेब विलंबता को कम करना है। सतह पर, QUIC टीसीपी + टीएलएस + एसपीडीवाई के समान है जो यूडीपी पर लागू है। QUIC, HTTP / 2 के बराबर मल्टीप्लेक्सिंग और फ्लो कंट्रोल, TLS के बराबर सुरक्षा और कनेक्शन शब्दार्थ, विश्वसनीयता और कनेक्शन नियंत्रण को TCP प्रदान करता है। क्योंकि टीसीपी ऑपरेटिंग सिस्टम गुठली, और मिडिलबॉक्स फर्मवेयर में लागू किया गया है, टीसीपी में महत्वपूर्ण परिवर्तन करना असंभव के बगल में है। हालांकि, चूंकि QUIC UDP के शीर्ष पर बनाया गया है, इसलिए यह इस तरह की सीमाओं से ग्रस्त है। QUIC को HTTP / 2 शब्दार्थ के लिए डिज़ाइन और अनुकूलित किया गया है।
संदर्भ :
- HTTP :
- सर्वर-प्रेषित ईवेंट :
- WebSockets :
- एसपीडीवाई :
- HTTP 2.0 :
- WebRTC :
- QUIC :