MQTT چیست

پروتکل MQTT چیست؟

MQTT یکی از شناخته شده ترین و پذیرفته شده ترین پروتکل های موجود در دنیای IoT است. طراحی سبک و سادگی افزونه ها ویژگی هایی هستند که باعث می شود MQTT برای دستگاه های مختلف با قابلیت پردازش و ذخیره سازی کوچک و بزرگ مناسب باشد. مزایای استفاده از MQTT به جای HTTP شامل صرفه جویی در مصرف انرژی و استفاده از پهنای باند شبکه پایین تر است که تقریباً برای هر دستگاه IoT هر دوی این موارد بسیار مهم هستند.

در این مقاله نگاه دقیق تری به MQTT خواهیم داشت.

 

MQTT چیست؟

MQTT بر اساس تعریف رسمی یک پروتکل پیام رسانی و اشتراک گذاری است. MQTT سبک و ساده است و به گونه ای طراحی شده که اجرای آن آسان باشد و به طور خاص برای IoT هایی که با منبع، قدرت، پهنای باند و رد پای محدود طراحی شده اند، مناسب است.

پروتکل MQTT شامل 3 بلوک اصلی است: کارگزار. ناشر و مشترک.

• کارگزار سرور مسئول مدیریت شبکه مشتریانی است که ترکیبی از ناشران و مشترکین است.
• ناشر دستگاهی است که پیام ها را به سرور ارسال می کند (منتشر می کند). این پیام ها با نام “موضوع” مشخص شده اند.
• مشترک وسیله ای است که موضوع را دریافت می کند.

هیچ ارتباط مستقیمی بین ناشر و مشترک وجود ندارد. مشترک به کارگزار (سرور) اعلام می کند که به چه موضوعاتی علاقه مند است و کارگزار ارسال پیام با داده های مشخص شده را برای موضوع / های درخواست شده کنترل می کند. مدل انتشار / اشتراک با مدل درخواست / پاسخ در HTTP کاملاً متفاوت است به طوری که امکان انتقال پیام یک به چند فراهم می شود.

موضوعات را می توان مانند یک برچسب برای هر پیام در نظر گرفت و این ارتباط می تواند به صورت یک سطح یا چند سطح (درخت) باشد که در آن هر سطح با یک برش جدا می شود (/) ( یعنی : اتاق ها / اتاق 1 / سنسورها / دما) . این روش می تواند برای سازمان‌دهی داده ها مفید باشد.

هر دستگاهی که می خواهد اطلاعات مربوط به موضوع خاصی را به دست آورد، باید با آگاه سازی کارگزار (سرور)، اشتراک دریافت کند. اشتراک را می توان برای یک موضوع خاص یا یک “الگو” انجام داد. برای انجام این کار از (+ و #) استفاده می شود.

MQTT
• علامت ‘+’ به معنای مشترک شدن در هر موضوعی در این سطح است. یعنی اتاق ها / + / حسگرها / درجه حرارت به معنای دریافت داده هایی است که از حسگرهای دما از همه اتاق ها حاصل می شوند.
• علامت ‘#’ به معنای مشترک شدن در همه موضوعات در این سطح و سطح پایین تر است. یعنی room / room1 / # به معنی دریافت کلیه اطلاعات مربوط بهroom1 است.

پروتکلMQTT بر اساسTCP / IP فعالیت می کند و مثل HTTP یک پروتکل ASCII نیست. در واقع MQTT یک پروتکل باینری است که در آن از بیت / ثانیه به عنوان واحدهای اساسی کنترل ویژگی های پروتکل استفاده می شود، در حالی که ASCII از کاراکترها استفاده می کند. پروتکل های باینری پهنای باند شبکه کمتری مصرف می کنند.

MQTT برای محیط هایی با منابع محدود به ویژه در مورد دسترسی به شبکه طراحی شده است. بنابراین این پروتکل دارای بسیاری از ویژگی ها و گزینه های مرتبط و مناسب برای ارسال پیام سرور و کلاینت است. QoS یا کیفیت سرویس اصطلاحی برای 3 گزینه ارسال پیام است:

• سطح 0 (QoS=0): : حداکثر یک بار تحویل. این یعنی اگر گیرنده پیام را از دست بدهد، پیام مجددا ارسال نخواهد شد. به عبارت دیگرT سرور (کارگزار) پیام را ارسال می کند و انتظار تصدیق مشتری یا کلاینت را ندارد.
• سطح 1 ( QoS=1 ): حداقل یک بار تحویل. این یعنی کارگزار تا زمانی که تصدیق دریافت نکند، ارسال پیام خود را به مشترک ادامه می دهد. این ممکن است منجر به دریافت پیام بیش از یک‌بار از جانب مشترکین شود.
• سطح 2 ( QoS=2 ): دقیقاً یک بار تحویل. این سطح تضمین می کند که یک پیام به طور دقیق به مشترک ارسال می شود.

حال سوال اینجاست که اگر مشتری / مشترک متصل نباشد چه اتفاقی خواهد افتاد؟ آیا وقتی مشترک دوباره وصل شود، پیام ها از بین می روند یا بعداً دریافت خواهند شد؟ پاسخ این است: بستگی دارد. این بستگی به گزینه ای به نام Clean Session دارد که در بسته اتصال مشخص شده است. در صورتی که کاربر این بیت را تنظیم کند، هر بار که مشتری (شناخته شده با یک شناسه) متصل شود، سرور جلسات قبلی (از جمله پیام) را ذخیره نمی کند و یک مورد جدید را شروع می کند. در حالی که اگر این بیت صفر باشد، سرور پیام ها را ذخیره می کند.

MQTT موضوعات مشخص را در زمان مشخص به مشترکین ارسال می کند. این پیام ها “پیام حفظ شده” نامیده می شوند. در حالی که “آخرین پیام” پیامی است که وقتی کارگزار ارتباط خود را با مشتری از دست می دهد در یک موضوع خاص منتشر می شود. پیام ارسالی برای هر مشتری به‌طور مستقل تعریف شده است.

مثال:

فرض کنیم دستگاهی وجود دارد که دارای سنسور دما است. مطمئناً این دستگاه می خواهد خوانش های خود را برای کارگزار ارسال کند. از طرف دیگر یک برنامه تلفن / دسکتاپ می خواهد این مقدار دما را دریافت کند. بنابراین 2 چیز اتفاق می افتد:

• دستگاه موضوعی را که می خواهد در مورد آن منتشر کند، به عنوان مثال “دما”را تعریف می کند. سپس پیام “مقدار دما” را منتشر می کند.

• برنامه تلفن / دسک تاپ موضوع “دما” را به اشتراک می گذارد. سپس پیامی را که دستگاه منتشر کرده است دریافت می کند که مقدار دما است.

نقش کارگزار در اینجا این است که پیام “مقدار دما” را گرفته و آن را به برنامه تلفن / دسک تاپ تحویل دهد.

 

برای امتیاز به این نوشته کلیک کنید!

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

اسکرول به بالا