2011-11-08 10 views
17

मैंने वेबसाकेट पढ़ा है लेकिन वे शुद्ध "सॉकेट" नहीं लगते हैं, क्योंकि उनके ऊपर एक अनुप्रयोग परत प्रोटोकॉल है। "ws:"किसी वेब ब्राउज़र (क्लाइंट साइड) से एक टीसीपी सॉकेट कनेक्शन कैसे स्थापित करें?

क्या वेब ब्राउज़र से शुद्ध सॉकेट कनेक्शन करने का कोई तरीका है, वेबपृष्ठों को जीवंत करने के लिए?

यहाँ

  • फ्लैश (फ्लैश स्थापित की जरूरत है) फ्लैश द्वारा प्रदान की सॉकेट (जावा स्थापित की जरूरत है) जावा द्वारा प्रदान अंधेरे

    • एप्लेट सॉकेट में मेरी यादृच्छिक stabs हैं

    लेकिन के बारे में एचटीएमएल 5 , यदि वे सॉकेट नहीं हैं तो उन्हें वेबसाकेट क्यों कहा जाता है?

    क्या वेबसाइकिल प्रोटोकॉल लागू करने के लिए इतना आसान है कि यह "लगभग" -स्केट है?

  • उत्तर

    41

    मैं WebSockets के बारे में पढ़ा है, लेकिन वे, शुद्ध "सॉकेट" होने के लिए नहीं है उन पर एक आवेदन परत प्रोटोकॉल है क्योंकि वहाँ।

    [क्या] वेबसाइकिल प्रोटोकॉल को लागू करने के लिए इतना आसान है [यह] "लगभग" -स्केट्स है?

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

    यहां तक ​​कि फ़्लैश कच्चे टीसीपी कनेक्शन बनाने में सक्षम नहीं है। फ्लैश सॉकेट भी सीओआरएस सुरक्षा जोड़ता है, लेकिन इन-बैंड हैंडशेक की बजाय, फ़्लैश सॉकेट कनेक्शन सुरक्षा नीति फ़ाइल का अनुरोध करने के लिए लक्ष्य सर्वर पर पोर्ट 843 से कनेक्शन बनाता है।

    क्या वेब ब्राउज़र से शुद्ध सॉकेट कनेक्शन करने का कोई तरीका है, वेबपृष्ठों को जीवंत करने के लिए?

    हां, आप मेरे websockify पुल/प्रॉक्सी का उपयोग कर सकते हैं जो वेबसाकेट सक्षम ब्राउज़र को websockify के माध्यम से सीधे एक टीसीपी सॉकेट से कनेक्ट करने की अनुमति देता है।

    लेकिन एचटीएमएल 5 के बारे में, अगर वे सॉकेट नहीं हैं तो उन्हें वेबसाकेट क्यों कहा जाता है?

    वेबसाकेट टीसीपी सॉकेट पर निर्मित एक परिवहन है। हैंडशेक के बाद बहुत कम ओवरहेड होता है (आमतौर पर केवल दो बाइट हेडर)।

    +0

    अच्छा उत्तर +1, और टाइपो के लिए धन्यवाद। मेरी खोज को संक्षिप्त करना: अगर मैं क्लाइंट साइड पर किसी सर्वर से कनेक्ट कर सकता हूं तो यह मेरे लिए पर्याप्त होगा, मेरा मतलब क्लाइंट मशीन पर स्थापित सर्वर है, ब्राउजर के दृष्टिकोण से लोकहोस्ट, शायद सुरक्षा समस्याएं (चाहिए) सरल होनी चाहिए, इस पर कोई सलाह? धन्यवाद –

    +0

    लोकहोस्ट से कनेक्ट करने से वास्तव में सुरक्षा की स्थिति में बदलाव नहीं आता है। एक दुर्भावनापूर्ण वेब पेज की कल्पना करें (या एक दोस्ताना वेब पेज पर दुर्भावनापूर्ण विज्ञापन) जो आपके सभी स्थानीय बंदरगाहों से जुड़ सकता है। असल में यह सभी फ़ायरवॉल सुरक्षा को छोड़ देता है। आप अभी भी किसी भी बंदरगाहों के लिए स्थानीय रूप से websockify चला सकते हैं जो आप प्रॉक्सी करना चाहते हैं। – kanaka

    +1

    w3c एक [कच्चे सॉकेट एपीआई] (http://www.w3.org/TR/raw-sockets/) के लिए एक मसौदा है [सुरक्षा और गोपनीयता विचार] (http://www.w3.org/TR/कच्चे सॉकेट/# सुरक्षा-और-गोपनीयता-विचार) कमजोर और एकवचन है। बस मुझे यही कहना है। – user2350838

    0

    यदि आप सर्वर से धक्का देने के लिए कुछ डेटा मांग रहे हैं तो इसे व्यापक रूप से सीओएमईटी या रिवर्स अजाक्स कहा जाता है।

    वेब सॉकेट अभी भी बहुत लोकप्रिय नहीं हैं क्योंकि नि: शुल्क फ़ायरवॉल समस्याएं हैं और अभी तक लोकप्रिय ब्राउज़र से न्यूनतम समर्थन हैं।

    आप http://www.ape-project.org/ पर एक नज़र ले जा सकते हैं के रूप में इस सबसे लोकप्रिय कार्यान्वयन में से एक है (लेकिन यूनिक्स/लिनक्स के मूल निवासी के लिए ही अब। खिड़कियों वे एक आभासी बॉक्स या VMware आधारित कार्यान्वयन उपयोग करने का सुझाव के लिए)

    2

    आप कर सकते हैं बस क्लाइंट और वेबसाकेट वाले सर्वर के बीच डेटा भेजें।

    • उन्हें

    का उपयोग कर डेटा के प्रकार और लंबाई

  • मास्क कहते हैं और डेटा encodes की तरह, कुछ हैडर बाइट्स कहते हैं: बस बोल, फर्क सिर्फ इतना है कि प्रस्तुत किया जाने WebSockets है कि ग्राहक है सर्वर को हेडर बाइट्स को भी जोड़ना होगा, लेकिन डेटा को एन्कोड करने की आवश्यकता नहीं है।

    यदि आप प्रोटोकॉल को सही ढंग से कार्यान्वित करते हैं (सर्वर पक्ष, यानी, क्योंकि ब्राउजर के पास पहले से ही कार्यान्वयन है), तो आप पाठ और बाइनरी डेटा भेजने के लिए आसानी से इसका उपयोग कर सकते हैं। (हालांकि ब्राउज़र समर्थन संकीर्ण है, विशेष रूप से बाद के लिए।)

  • +1

    निर्धारण जानना बहुत अच्छा होगा, वे * हेडर बाइट्स * कैसे दिखते हैं, कोई संदर्भ? धन्यवाद –

    +1

    @void: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17#section-5.1 पर विनिर्देशन है। पहले मैंने क्लाइंट से सर्वर से डेटा को डीकोड करने के बारे में कुछ छद्म कोड पोस्ट किया था http://stackoverflow.com/q/7045885 – pimvdb

    4

    मैं आपके माध्यमिक प्रश्नों के कानका के उत्तरों पर सुधार नहीं कर सकता, और मुझे पता है कि यह प्रश्न एक वर्ष पुराना है। लेकिन मुख्य प्रश्न के लिए, Is there any way of doing a pure socket connection from a web browser, to enliven webpages?Java/JavaScript Socket Bridge नामक एक प्रोजेक्ट है जो हो सकता है कि आप (या Google खोज से इस पृष्ठ पर आने वाले किसी भी व्यक्ति) की तलाश कर रहे हों। दूसरों द्वारा वर्णित इस विधि का लाभ यह है कि इसे क्लाइंट-साइड या सर्वर-साइड सेवा चलाने की आवश्यकता नहीं होती है। इसलिए, उदाहरण के लिए, यदि आप जावास्क्रिप्ट में पूरी तरह से एक आईआरसी क्लाइंट को कार्यान्वित करना चाहते हैं लेकिन आपका वेब होस्ट आपको कनेक्शन को प्रॉक्सी करने के लिए पर्याप्त अधिकारों की अनुमति नहीं देता है, तो यह जावा एप्लेट जाने का रास्ता होगा। एकमात्र चिंता यह सुनिश्चित कर रही है कि क्लाइंट ने जावा स्थापित और अनुमति दी हो।

    1

    वेबसॉकेट का लाभ यह है कि यह HTTP आधारित है। आप इसे पर्यावरण में भी इस्तेमाल कर सकते हैं वहां http प्रॉक्सी का उपयोग किया जाता है। इस प्रकार वेबसाइटों में सादे टीसीपी के रूप में उच्च आधारभूत संरचना संगतता है।

    इसके अतिरिक्त http/WebSocket आप जो आप अन्यथा अपने दम पर स्पष्ट करना पड़ता कुछ सुविधाओं को प्रदान कर रहा है: यूआरआई

  • के माध्यम से
  • Multiplexing

    • पुनर्निर्देशन
    • नेट keepalive
  • संबंधित मुद्दे