क्या मुझे मॉस्किटो के वेब सॉकेट्स का उपयोग करना चाहिए या क्लाइंट्स को सीधे कनेक्ट करना चाहिए?


11

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

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


1
क्या आप हमें बता सकते हैं कि क्या आप सभी नेटवर्क को कोड कर रहे हैं? यानी सभी नोड्स या क्लाइंट और सर्वर दोनों? या अगर आपको किसी और के सॉफ़्टवेयर के साथ बातचीत करनी है? ऐसा लगता है कि आप केवल ग्राहकों को कोडिंग कर सकते हैं, लेकिन मुझे यकीन नहीं हो सकता है
Mawg का कहना है कि मोनिका

1
@Mawg सर्वर Mosquitto MQTT ब्रोकर होगा, लेकिन मैं चुन सकता हूं कि मैं सभी क्लाइंट के लिए कौन सा प्रोटोकॉल का उपयोग करूं (और Mosquitto वेब सॉकेट और डायरेक्ट टीसीपी कनेक्शन दोनों प्रदान करता है, यही कारण है कि मैंने पूछा)।
Aurora0001

1
मुझे लगता है कि यहां कुछ भ्रम है। मुझे लगता है कि "प्रत्यक्ष टीसीपी" से @ Auroa0001 का क्या मतलब है, वेबक्यूकेट्स (टीसीपी के ऊपर) पर MQTT के बजाय टीसीपी पर MQTT का उपयोग कर रहा है। दोनों ही मामलों में पुस्तकालय उपलब्ध हैं इसलिए सॉकेट के लिए कोई कोड लिखने की आवश्यकता नहीं है।
१ight

@ सच पूछिए तो सवाल पूछने के दौरान मेरा इरादा वास्तव में यही था। जवाब थोड़ा भटक गए, ऐसा लगता है।
Aurora0001

जवाबों:


7

यहाँ सवाल यह प्रतीत होता है कि "क्या मुझे टीसीपी के ऊपर एमक्यूटीटी का उपयोग करना चाहिए, या वेबस्कॉक (जो टीसीपी पर भी जाता है) पर एमक्यूटीटी का उपयोग करना चाहिए?" दूसरे शब्दों में, "वेबक्यूकेट्स प्रोटोकॉल में MQTT को एक अच्छा विचार है?"

यह पूरी तरह से आपके आवेदन के लिए (लगभग) नीचे है और क्या आपको वेबसोकेट समर्थन की आवश्यकता है - शायद एक ब्राउज़र में संदेशों का उपभोग करने के लिए या फ़ायरवॉल कारणों के लिए। यदि आपके पास पोर्ट M83TT के लिए पोर्ट 1883 या बेहतर 8883 पर आपका सर्वर उपलब्ध नहीं हो सकता है, तो वेबस्कैट आपका सबसे अच्छा विकल्प हो सकता है।

Websockets को अतिरिक्त बैंडविड्थ की आवश्यकता होती है, लेकिन क्या आपके लिए यह महत्वपूर्ण है कि कुछ ऐसा हो जो आप केवल उत्तर दे सकें।

यह भी ध्यान देने योग्य है कि मॉस्किटो के वर्तमान संस्करणों में, वेबसोकेट काम नहीं करते हैं और साथ ही साथ वे ऐसा कर सकते हैं जब वेबसैट संदेश भेजने / प्राप्त करने के दौरान अतिरिक्त विलंबता हो सकती है। यह कुछ ऐसा है जो भविष्य के संस्करणों में एक मुद्दा नहीं होगा।


7

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

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

यदि आप ओवरहेड पर विचार कर रहे हैं, तो यह इतना बड़ा नहीं है। आप इस लेख को संदर्भित कर सकते हैं , यदि आप वेबसैट के ओवरहेड के बारे में अधिक जानना चाहते हैं।

मेरी व्यक्तिगत राय में, वेबसैट का उपयोग करना हमेशा बेहतर होता है, सिवाय इसके कि आपको कुछ गंभीर चिंताएँ हैं।


2
Err, TCP और websockets प्रोटोकॉल हैं: tools.ietf.org/html/rfc6455 , इसके अलावा टीसीपी निम्न स्तर पर एक सॉकेट है।
गॉफलाइट

@ThisaruGuruge आपके उत्तर के लिए धन्यवाद - सवाल में मेरे परिदृश्य में मैं मानता हूं कि आप अपने जवाब से देखते हुए वेब सॉकेट पर टीसीपी लेंगे? विशेष रूप से चूंकि वेब सॉकेट मुख्य रूप से ब्राउज़रों द्वारा समर्थित प्रतीत होते हैं, इसलिए टीसीपी सॉकेट्स पर वेब सॉकेट्स का उपयोग करने की आवश्यकता का कोड ओवरहेड है।
Aurora0001

1
"अधिकांश आधुनिक सर्वर क्लाइंट को रैंडम पोर्ट के माध्यम से कनेक्ट करने की अनुमति नहीं देते हैं" - सर्वर यह चुन सकता है कि कौन से पोर्ट को बाइंड करना है ( man7.org/linux/man-pages/man2/bind.2.html ), साथ ही एक फ़ायरवॉल भी कर सकता है इसके अलावा प्रतिबंधित है। फिर भी, जब आप कहते हैं कि "अगर आपको किसी अन्य सर्वर से कनेक्ट करना है, तो समस्याएं उत्पन्न होंगी " मैं सहमत नहीं हूं । "जैसा कि उत्पन्न हो सकता है "। फिर भी, यह विन्यास की बात है, जो वेबस्कैट शायद कच्चे सॉकेट्स की तुलना में आसान बना देगा।
मावग का कहना है कि मोनिका

6

tl; dr - हमेशा अपने स्वयं को कोडित करने के लिए मुफ्त पुस्तकालयों को प्राथमिकता दें (जब तक कि आपके पास अत्यधिक आवश्यकताएं न हों)


क्या मुझे मॉस्किटो के वेब सॉकेट्स का उपयोग करना चाहिए या क्लाइंट्स को सीधे कनेक्ट करना चाहिए?

तार का एक टुकड़ा कितना लंबा है? (YMMV)

मैं केवल आम तौर पर बोल सकता हूं, लेकिन मैं हमेशा कच्ची कुर्सियां ​​(या, वास्तव में, किसी भी चीज को कोड करने के लिए पसंद करता हूं जो मुझे लाइब्रेरी से मुफ्त में मिल सकती है)।

वे कोडिंग को सरल और कम त्रुटि प्रवण बनाते हैं। वे बहुत सारे घर के रख-रखाव और त्रुटि से निपटने का ध्यान रखते हैं, जो कोड है जिसे आपको खुद लिखना और डिबग करना होगा, जहां एक पुस्तकालय के रूप में आम तौर पर अच्छी तरह से समीक्षा और परीक्षण किया गया है और हजारों अन्य लोगों द्वारा उपयोग किया जा रहा है, जिनमें से सभी आपके लिए बगों की रिपोर्ट / निर्धारण करेगा।

इसके अलावा, यह आपके लिए बनाए रखने के लिए कम कोड है (और, संभवतः, पोर्ट), जिसका अर्थ है कि अपने ऐप को विकसित करने, परीक्षण और पॉलिश करने, या अगले एक पर जाने के लिए अधिक समय।

केवल ओवरहेड यकीनन एक फ़ंक्शन कॉल है, यदि आप स्वीकार करते हैं कि लाइब्रेरियन नेकनेस (त्रुटि से निपटने, नली-रखने और पसंद करने वाले) कुछ ऐसा है जो आपको अच्छा, स्थिर, सॉफ़्टवेयर प्राप्त करने के लिए खुद को कोड करना होगा।

यदि आप प्रदर्शन के बारे में चिंतित हैं, तो बस प्रोफाइल। लेकिन, जब तक कि आपका सॉकेट एक सेकंड में सैकड़ों बार सक्रिय होता है, मैं परेशान नहीं होता।


खैर, टीसीपी कनेक्शन और (वेब) सॉकेट कनेक्शन के लिए मुफ्त पुस्तकालय हैं, और दोनों को "प्राप्त संदेश" घटना की आवश्यकता है।
गॉफलाइट

2
ओपी यह जानना चाहता है कि क्या दक्षता के लिए टीसीपी या वेबसोकेट का उपयोग करना बेहतर है , और आप कहते हैं "एक अमूर्त पुस्तकालय का उपयोग करें ताकि आप परेशान न हों"। ज़रूर, लेकिन कौन सा? C # में System.Net.Sockets (अच्छी तरह से, अच्छी तरह से ...) में एक TcpClient लाइब्रेरी है और एक नगेट पैकेज (WebSocketSharp) में एक वेबसोकेट लाइब्रेरी है। मैं मानता हूं कि सभी भाषाओं के लिए एक सामान्य एमक्यूटीटी पुस्तकालय है लेकिन ओपी चाहता है कि इस पर नियंत्रण होना चाहिए कि इसे किस प्रोटोकॉल का उपयोग करना चाहिए।
गौफलाइट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.