MQTT में क्लाइंट-सर्वर कनेक्शन स्थापना के बारे में भ्रम


19

विनिर्देशों के अनुसार , यह हमेशा क्लाइंट होता है जिसे सर्वर से कनेक्शन स्थापित करना चाहिए।

ग्राहक:

एक प्रोग्राम या डिवाइस जो MQTT का उपयोग करता है। एक क्लाइंट हमेशा सर्वर से नेटवर्क कनेक्शन स्थापित करता है । यह

  • अन्य ग्राहकों को रुचि हो सकती है कि आवेदन संदेश प्रकाशित करें।

  • एप्लिकेशन संदेशों का अनुरोध करने के लिए सदस्यता लें जो इसे प्राप्त करने में रुचि रखते हैं।

  • अनुप्रयोग संदेशों के लिए एक अनुरोध को हटाने के लिए सदस्यता समाप्त करें।

  • सर्वर से डिस्कनेक्ट करें।

और यदि यह क्लाइंट किसी एप्लिकेशन संदेश के लिए सदस्यता लेता है, तो सर्वर को उन संदेशों को इस विशेष क्लाइंट को अग्रेषित करना चाहिए।

सर्वर:

एक प्रोग्राम या डिवाइस जो ग्राहकों के बीच मध्यस्थ के रूप में कार्य करता है जो एप्लिकेशन संदेश और ग्राहक जो सदस्यता बना चुके हैं को प्रकाशित करते हैं। एक सर्वर

  • ग्राहकों से नेटवर्क कनेक्शन स्वीकार करता है।

  • ग्राहकों द्वारा प्रकाशित अनुप्रयोग संदेश स्वीकार करता है।

  • ग्राहक सदस्यता लें और ग्राहकों से अनुरोध अनसब्सक्राइब करें।

  • फॉरवर्ड एप्लिकेशन मैसेज जो क्लाइंट सब्सक्रिप्शन से मेल खाते हैं

क्या इसका मतलब यह है कि यदि कोई ग्राहक सदस्यता लेता है, तो वह सर्वर से जुड़ा रहता है जबकि सदस्यता वैध होती है, जबकि अधिकांश समय में डेटा प्रवाह नहीं होता है?

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

जवाबों:


11

क्या इसका मतलब यह है कि यदि कोई ग्राहक सदस्यता लेता है, तो वह सर्वर से जुड़ा रहता है जबकि सदस्यता वैध होती है, जबकि अधिकांश समय में डेटा प्रवाह नहीं होता है?

हां, एक बार कनेक्शन हो जाने के बाद ग्राहक संदेशों का इंतजार करेगा, हालांकि यह सर्वर को नियमित रूप से रखने के लिए पिंग मैसेज भी रखेगा। यदि सर्वर द्वारा पिंग संदेश प्राप्त नहीं होता है, तो यह आपको डिस्कनेक्ट कर सकता है।

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

यदि क्लाइंट डिस्कनेक्ट हो गया है, तो हाँ, यह संदेश प्राप्त नहीं करेगा, हालांकि एमक्यूटीटी में ऐसी विशेषताएं हैं जो इसके आसपास काम करती हैं।

यदि क्लाइंट 'क्लीन सेशन' फ़्लैग के साथ सर्वर को झूठा सेट करता है, तो सर्वर को उस क्लाइंट आईडी की सदस्यता याद रहेगी। एक बार जब ग्राहक पुन: जुड़ जाता है, तो उसे फिर से सदस्यता लेने की आवश्यकता नहीं होगी क्योंकि सर्वर ने इसे याद रखा होगा।

इसके अलावा, आप QoS स्तर 1 या 2 का उपयोग करके सदस्यता ले सकते हैं। इन QoS स्तरों के साथ, सर्वर संदेशों को संग्रहीत करेगा और ग्राहक को भेजने से पहले पुन: कनेक्ट करने के लिए प्रतीक्षा करेगा। इस तरह, भले ही ग्राहक डिस्कनेक्ट हो जाए और फिर से जुड़ जाए, फिर भी उन्हें सभी प्रकाशित संदेश प्राप्त होंगे।

इस साइट में MQTT प्रोटोकॉल की व्याख्या करने वाले कुछ अच्छे संसाधन हैं।


9

क्या इसका मतलब यह है कि यदि कोई ग्राहक सदस्यता लेता है, तो वह सर्वर से जुड़ा रहता है जबकि सदस्यता वैध होती है, जबकि अधिकांश समय में डेटा प्रवाह नहीं होता है?

हां, आपका क्लाइंट संदेशों का इंतजार करेगा।

... यदि ग्राहक सदस्यता के बाद डिस्कनेक्ट करता है, तो एक सर्वर संदेशों को अग्रेषित नहीं कर सकता है

आपको वियोग का प्रबंधन करना होगा (विशेषकर बैटरी चालित उपकरणों में)। यह MQTT की " अंतिम वसीयत और वसीयतनामा " सुविधा का उपयोग करके किया जा सकता है : जब कोई डिवाइस डिस्कनेक्ट करता है तो यह एक अंतिम संदेश भेजेगा।


1

आपको कनेक्शन और सत्र को अलग करना चाहिए।

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

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

MQTT 5.0 प्रोटोकॉल में (बहुत ही ताजा, लेकिन परिप्रेक्ष्य) क्लाइंट साइड से सत्र टीटीएल को निर्दिष्ट करना संभव है या कनेक्शन के बाद भी इसे बदल सकते हैं। यह अस्थिर WAN कनेक्शन (IoT ज्यादातर) या आपके द्वारा बताए गए जैसे राज्य कनेक्शन के लिए अत्यंत उपयोगी है।

ग्राहक के नजरिए से AFAIK वर्तमान में MQTT 5.0 प्रोटोकॉल के साथ अजगर में इस्तेमाल किया जा सकता gmqtt और साथ जावास्क्रिप्ट में mqtt.js

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.