در سال ۱۹۹۹ برای اولین بار این پروتکل در سازمانی به نام OASIS ایجاد گردید، پروتکل MQTT یک پروتکل تبادل پیام سریع و باینری (انتقال داده به صورت آرایه ای از بایت ها) است که در بستر TCP/IP قرار دارد و امکان ارتباط تجهیزات با منابع محدود با یکدیگر را به سادگی فراهم می سازد.
MQTT به لحاظ عملکردی، پروتکلی سبُک یا اصطلاحا Lightweight است؛ به راحتی پیاده سازی شده و در انتقال دیتا چابُک است.
این پروتکل از الگوی انتشار-اشتراک یا publish-subscribe بهره میبرد و به عنوان وسیله ای برای ارتباط ماشین با ماشین (M2M) نقش بسیار مهمی در دنیای اینترنت اشیاء ایفا می نماید.
در اینجا سعی داریم که نحوه کارکرد پروتکل MQTT را به شکل ساده و با مثال های قابل لمس شرح دهیم و توضیح دهیم که چرا پروتکل MQTT یک پروتکل مناسب برای استفاده در IOT (چیزنت یا اینترنت اشیاء) است.
پرتکل MQTT چگونه کار می کند؟
برای درک بهتر این پروتکل مقایسه ای بین این پروتکل و پروتکل اینترنتی HTTP انجام می دهیم. همانطور که می دانید HTTP یک پروتکل request–response بین دو سمت است که یک سمت در نقش کلاینت و دیگری در نقش سرور عمل می کند. به این صورت که کلاینت درخواست خود را به سرور ارسال کرده و سرور پس از دریافت و پردازش آن پاسخی را به کلاینت بر می گرداند. در حین این عمل باید خط ارتباطی بین سرور و کلاینت حفظ شود. در غیر این صورت این ارتباط از بین می رود.
برای رفع مشکل فوق MQTT الگوی request–response را به الگوی publish-subscribe تبدیل کرده است. به این صورت که دو کلاینت به صورت مستقیم به یکدیگر متصل نبوده و ارتباط بین آنها از طریق یک واسط (بروکر) برقرار می شود.
MQTT پروتکلی داده محور بوده درحالیکه HTTP پروتکلی اسناد محور است. به این معنی که برای انتقال اسناد (فیلم–تصویر و …) و وب سرویس ها پروتکل HTTP مناسب بوده و برای مخابره پیامهای کوتاه MQTT مناسب است.
می خواهیم با استفاده از مثال پیام رسانی مانند تلگرام مقداری قضیه را باز کنیم، فرض کنید شما (دستگاه الکترونیکی) قصد دارید یک سری پیام (داده) را در اختیار گروهی از کاربرها (دستگاه های دیگر) قرار دهید، سه راه برای انجام این کار وجود دارد:
روش اول:
هر کسی که نیاز به مطالب (داده ها) شما دارد، به صورت خصوصی به شما (دستگاه) پیام می دهد و شما مطالب مورد نظر را برای او ارسال می کنید، غالب پروتکل های اینترنت به این شکل (request-response) عمل می کنند و در واقع شما باید نقش سرویس دهنده (سرور) را بازی کنید.
این کار باعث به هدر رفتن وقت و ترافیک شما می شود و همچنین ممکن است در این میان کاربرانی هم وجود داشته باشند که فقط برای ایجاد مزاحمت و مصرف ترافیک به شما پیام بدهند (حملات DDOS).
روش دوم:
شما (دستگاه) مطالب خود (داده ها) را در اختیار یک ربات تلگرامی (سرور دیگر) قرار بدهید و آن ربات پیام را برای افراد متقاضی (دیگر دستگاه ها) ارسال کند. این روش مقداری بهتر از روش قبلی است چون نیاز نیست به دلیل تکرار ارسال توسط شما وقت زیادی برای رساندن پیام به افراد مختلف صرف کنید و کسی مزاحم شما نخواهد شد. با این همه شما نیاز خواهید داشت که یک ربات تلگرامی (سرور) تهیه کنید که کار پیام رسانی را بر عهده داشته باشد و این خود علاوه بر ایجاد هزینه راه اندازی، هزینه نگهداری را نیز به شما تحمیل خواهد کرد. مدام باید مراقب باشید که ربات از کار نیفتاده باشد، هک نشده باشد و کارش را به درستی انجام دهد. این روش با وجود این که از راه حل اول بهتر است ولی باز دچار نقصان هایی است که شاید برای استفاده در دستگاه های الکترونیکی زیاد مناسب نباشد.
روش سوم:
در این روش شما (دستگاه) به سادگی یک کانال تلگرامی ایجاد می کنید و هر شخصی که علاقمند به مطالب (داده های) شما باشد، به سادگی با عضویت در کانال شما، پیام ها را دریافت خواهد کرد. این روش به نسبت دو روش دیگر برای دستگاه های الکترونیکی که از حافظه کمی برخوردار هستند و همچنین قصد ندارند که یک سرور خاص تهیه کنند، بسیار کاربردی تر است چرا که مستلزم صرف وقت و هزینه اضافی نمی باشد.
پروتکل MQTT دقیقاً مانند روش سوم عمل میکند، در مثال های فوق تلگرام نقش اینترنت و پروتکل TCP را داشت که پیام ها را منتقل می کرد و کانال تلگرامی هم دقیقاً کار واسط (Broker) را در پروتکل MQTT انجام می دهد. شما هم مطالب را یکبار ارسال (publish) می نمایید و کاربران به سادگی با عضویت در کانال شما، پیام ها را دریافت (subscribe) خواهد کرد و اگر از مطالب (داده های) شما خوششان نیامد به سادگی از کانال خارج شده و دیگر پیامی دریافت نمیکند.
بروکر چیست؟
در ادامه توضیحات فوق همان طور که مشخص است در MQTT برای قابلیت انتشار-اشتراک (pub-sub) نیاز به یک امکانی مانند سرور وجود دارد که به اصطلاح به آن بروکر (broker) گفته میشود. بروکر در حقیقت قلب اصلی ارتباط کلاینت ها با هم است. یعنی یکی از کلاینت ها یک مطلب یا موضوعی را publish میکند و بقیه کلاینت ها می توانند از طریق بروکر subscribe کنند و پیام را مشاهده کنند. این پروتکل بسیار شبیه به ارتباط کلاینت سرور است ولی کلاینت/سرور نیست.
این پروتکل همچنین دارای QOS نیز می باشد. (Quality of Service)
qos دراین پروتکل دارای سه حالت می باشد.
QoS Level 0:
ساده ترین حالت برقراری ارتباط با broker است که نیازی به acknowledgment ندارد.
QoS Level 1:
در این حالت سرور مطمئن است که حداقل یک بار یا بیشتر بسته به کلاینت رسیده است و ACK از کلاینت می گیرد.
QoS Level 2:
در این حالت broker یک و فقط یک بسته به کلاینت می فرستد و مطمئن می شود که بسته رسیده است. این حالت خیلی توصیه نمی شود.
آزمون الکترونیک خزر
شرکت آزمون الکترونیک خزر با توجه به تحقیقات گسترده ای که در این زمینه انجام داده است و به واسطه مخترعین و متخصصین مجرب در این رشته که در اختیار دارد در راستای بهرهوری از این قابلیت در حال تولید دستگاه های کنترلی هوشمندی است که از MQTT برای ارسال اطلاعات جهت ارتباط با نرم افزارهای تحت وب و اندرویدی استفاده می کند.
بدین منظور برای سهولت مدیریت و برنامه ریزی در این قابلیت، نرم افزارهای اندرویدی و تحت وب نیز توسط برنامه نویسان شرکت طراحی شده است. به وسیله این نرم افزارها تجربه لذت بخشی از مدیریت و برنامه ریزی دستگاه ها از طریق اینترنت اشیاء برای کاربران ایجاد می گردد.