javascript - क्या एचटीएमएल 5 वेब ऐप्स को पीयर-टू-पीयर HTTP कनेक्शन बनाने की अनुमति देगा?




ajax html5 (4)

हां आखिरकार।

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

html5rocks.com लिए डॉक्स, नमूना कोड, और लाइव उदाहरण html5rocks.com पर पाए जा सकते हैं।

caniuse.com और html5rocks.com अनुसार, निम्न ब्राउज़र html5rocks.com समर्थन करते हैं:

पूर्ण समर्थन: एज 14, फ़ायरफ़ॉक्स 22, फ़ायरफ़ॉक्स एंड्रॉइड 55
आंशिक समर्थन: एंड्रॉइड ब्राउज़र 56, क्रोम 20, क्रोम एंड्रॉइड 2 9, एज 12, फ़ायरफ़ॉक्स 17, ओपेरा 18, ओपेरा एंड्रॉइड 20, ओपेरा मोबाइल 12, यूसी ब्राउज़र एंड्रॉइड 11.4
भविष्य का समर्थन (क्यू 3 2017): आईओएस 11 के लिए क्रोम, आईओएस 11 और ओएस एक्स 10.11 के लिए सफारी 11
कोई समर्थन नहीं: आईई, आईई मोबाइल, ओपेरा मिनी

वेबआरटीसी की संतृप्ति दर ऐप्पल उपकरणों पर सीमित है, क्योंकि सफारी 11 अभी तक जारी नहीं है और आईओएस 11 या ओएस एक्स 10.11 की आवश्यकता है। हालांकि पिछले अपग्रेड रुझानों से प्रक्षेपित होने के बावजूद, वेबआरटीसी 2018 तक आईओएस उपकरणों के लगभग 75% और 2020 तक 100% पर उपलब्ध होना चाहिए।

क्या एक वेब ऐप बनाना संभव है कि, केंद्रीय सर्वर की मदद से, उसी वेब ऐप के अन्य उपयोगकर्ताओं के साथ सीधा कनेक्शन बना सकता है? मैं यूडीपी छेद पंचिंग के समान प्रक्रिया की कल्पना कर रहा हूं।

मैंने HTML5 में नए वेबसाकेट एपीआई के बारे में पढ़ा है, लेकिन ऐसा लगता है कि पूरी तरह से डुप्लेक्स कनेक्शन शुरू होने से पहले आपको डब्ल्यूएस-संगत सर्वर के साथ कनेक्शन शुरू करना होगा। मैं ग्राहकों के बीच सीधा संबंध बनाने के लिए एक प्रक्रिया के बारे में सोच रहा हूं, जिसमें सर्वर प्रारंभिक हैंडशेक में शामिल हो रहा है।

नोट: जावा एप्लेट्स गिनती नहीं है। मुझे केवल मानक ब्राउज़र तकनीकों में दिलचस्पी है।


कई कारण हैं कि यह मुश्किल क्यों होगा:

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

वेबसाकेट इन मुद्दों में से दूसरे को हल करने के लिए डिज़ाइन किया गया है, लेकिन (जानबूझकर, मैं उम्मीद करता हूं) अन्य दो नहीं। जब वे एचटीएमएल 5 spec में पीयर-टू-पीयर के बारे में बात करते हैं, तो वे सर्वर और क्लाइंट के बीच पूर्ण डुप्लेक्स संचार के बारे में बात कर रहे हैं, एक क्लाइंट और दूसरे के बीच नहीं।

हालांकि, websockets के शीर्ष पर उचित नेटवर्क स्टैक को कार्यान्वित करना आसान होगा - यह साबित करने के साथ कि सभी संचार सर्वर के माध्यम से अभी भी किए जाने होंगे। मैंने इसे लंबे मतदान का उपयोग करके देखा है (यूनी में मेरा एक दोस्त लंबे मतदान का उपयोग कर एक पूर्ण टीसीपी / आईपी स्टैक लिखा था)।


मैं दूसरा harshath.jr: आप बहुत अच्छी तरह से एक सर्वर के रूप में कार्य कर रहे सर्वर (प्रत्येक जुड़े एजेंट के "उत्पत्ति" का खुलासा कर सकते हैं; मूल योजना + होस्ट + पोर्ट draft-abarth-origin , इस योजना के साथ या तो "ws" या "डब्ल्यूएसएस")। फिर आप पीयर-टू-पीयर वेबसॉकेट कनेक्शन शुरू कर सकते हैं; CORS को धन्यवाद के माध्यम से SOP काम किया जा रहा है। बेशक, इसका मतलब है कि प्रत्येक एजेंट (यानी ब्राउज़र) को अपना वेबस्केट सर्वर (à la Opera Unite) एम्बेड करना होगा।

इस बीच, इसे एक्सएमपीपी / आईआरसी / इत्यादि करें: कोई सहकर्मी-से-पीयर कनेक्शन नहीं बल्कि कनेक्टेड एजेंटों को संदेश पास करने के लिए केंद्रीय सर्वर (या नेटवर्क!) के लिए वेबसॉकेट कनेक्शन (अंततः कुछ विशिष्ट वेबसाकेट का उपयोग करना " subprotocol ")

संपादित करें: ध्यान दें कि यह सब वास्तव में HTML5 के दायरे से बाहर है (उन सभी चीजें एक बार HTML5 का हिस्सा थीं लेकिन उन्हें अपने स्वयं के चश्मा में विभाजित कर दिया गया है)








html5