پروتکل MQTT یک پروتکل ارتباطی بر مبنای TCP/IP است که به دلیل کم حجم بودن دیتای ارسالی و دریافتی در مقایسه با HTTP به پهنای باند کمتری برای برقراری ارتباط نیاز دارد. این خصوصیت MQTT آن را به پروتکل ارتباطی بسیار مناسبی در زمینه اینترنت اشیاء بدل میکند جایی که تعداد زیادی از سنسورهای کم قدرت که اغلب با باتری کار میکنند وجود دارند. MQTT بر اساس مدل پیامرسانی انتشار و اشتراک (Pub/Sub) کار میکند که دارای خصوصیاتی از قبیل نگهداری پیام و آخرین وصیت (LWT) میباشد. رمزنگاری , احراز هویت و کنترل دسترسی به راحتی در این پروتکل قابل انجام است. MQTT با فراهم کردن ویژگی کیفیت خدمت (QoS) امکان ارسال پیام در بسترهای ارتباطی با کیفیت پایین و غیر قابل اعتماد را فراهم میکند. ساختار سرفصل پیام (Topic) در این پروتکل به صورتی است که به کاربر امکان ساماندهی پیامهای ارسالی و دریافتی را میدهد. برای استفاده از این پروتکل به یک سرور واسطه (Broker) نیاز هست که معروفترین آنها به نام ماسکیتو (Mosquitto) به صورت متن باز در اختیار علاقمندان قرار دارد.
مدل پیامرسانی انتشار و اشتراک (Pub/Sub) چطور کار میکند؟
مدل پیامرسانی انتشار و اشتراک یک مدل ارتباطی غیر همزمان است که در این مدل هر پیامی که توسط منتشر کننده به یک سرفصل خاص ارسال شود توسط همه مشترکین آن سرفصل دریافت میشود. در این مدل منتشر کننده هیچ شناختی از مشترک ندارد و همچنین مشترک نیز منتشر کننده را نمیشناسد. پیامی که منتشر کننده ارسال می کند توسط سرور واسطه در صف قرار میگیرد به محض آنکه مشترک یا مشترکینی به سرور واسطه متصل شوند و به سرفصل آن پیام آبونه شده باشند پیام را دریافت میکنند.
سرفصل پیام (Topic) چیست؟
سرفصل یک رشته حروف است که به سرور واسطه این امکان را میدهد تا پیامها را بر اساس آن برای هر مصرف کننده پالایش کند. هر سر فصل از یک یا چند زیر سرفصل تشکیل میشود که با کاراکتر فوروارد اسلش (/) از هم جدا میشوند. مطابق نمونه زیر:
Home/Devices/Temperature
در این مثال Temperature زیر سرفصل Devices و Devices زیر سرفصل Home میباشد.
کیفیت خدمت (QoS) چیست؟
در MQTT میتوان کیفیت خدمت هر پیام ارسالی را تعیین کرد به طور کلی سه نوع کیفیت خدمت وجود دارد:
۱. QOS=0
۲. QOS=1
۳. QOS=2
در نوع ۱ پیام ارسالی حداکثر یک بار ارسال میشود و تضمینی برای دریافت آن توسط مشترک وجود ندارد به این معنی که اگر مشترک به سرور واسطه متصل نباشد و این پیام را دریافت نکند سرور واسطه دیگر مجددا این پیام را ارسال نخواهد کرد.
در نوع ۲ پیام ارسالی حداقل یک بار ارسال میشود به این معنی که تا مشترک یا مشترکین پیام را دریافت نکنند سرور واسطه پیام را در نوبت های بعدی ارسال خواهد کرد. و ممکن است مشترک آن پیام را حتی بیش از یکبار دریافت کند.
در نوع ۳ تضمین میشود که مشترک پیام را فقط یکبار دریافت کند. این امن ترین در عین حال کندترین روش ارسال پیام است زیرا که به سیستم تصدیق ۴ مرحله ای نیاز دارد.
آخرین وصیت (LWT) چیست؟
خصوصیت آخرین وصیت زمانی استفاده میشود که بخواهیم قطع شدن ناگهانی یک کلاینت را تشخیص دهیم. هر کلاینتی که به سرور واسطه متصل میشود میتواند سرفصل و پیام آخرین وصیت خود را تعیین کند. و سرور واسطه آن را ذخیره میکند و به محض اینکه کلاینت ارتباطش با سرور واسطه قطع شود سرور واسطه هر کلاینتی که به سرفصل آخرین وصیت آبونه شده باشد را با ارسال پیام آخرین وصیت مطلع میکند.
پروتکل MQTT پروتکلی کارآمد است که هم اکنون توسط بزرگترین شرکتها از جمله فیس بوک برای پیامرسانی استفاده میشود. دیگر شرکتهایی که خدمات وب ارائه میدهند از جمله آمازون و گوگل از این پروتکل حمایت میکنند و کاربران آنها میتوانند از زیرساختهای آنان برای توسعه محصولات خود مبتنی بر MQTT استفاده کنند. استفاده از پروتکل ارتباطی مناسب در مرحله ای اهمیت خود را نشان میدهد که تعداد کاربران محصولات یک کسب و کار به ده ها هزار و حتی صد ها هزار نفر میرسد و مقیاس پذیری یکی از ملزومات آن کسب و کار میشود.