MQTT یا HTTP برای اینترنت اشیا؟
مقایسه MQTT و HTTP برای پروژههای اینترنت اشیا: مصرف پهنای باند و باتری، ارسال بیدرنگ فرمان به دستگاه و اینکه هر کدام کجا انتخاب درستی است.
دو مدل متفاوت ارتباط#
HTTP بر پایه «درخواست و پاسخ» است: کلاینت هر بار یک درخواست میفرستد و سرور جواب میدهد. MQTT بر پایه «انتشار و اشتراک» است: دستگاه یک بار به بروکر وصل میشود و این اتصال باز میماند؛ از آن به بعد هر پیامی که روی تاپیک مورد نظرش منتشر شود، بلافاصله به دستش میرسد.
این تفاوت ساده، روی مصرف باتری، پهنای باند و سرعت واکنش سیستم اثر زیادی دارد. اگر با MQTT آشنا نیستید، اول مقاله MQTT چیست و بروکر MQTT چه کاری انجام میدهد؟ را بخوانید.
سربار هر پیام#
هر درخواست HTTP سرآیندهایی متنی دارد که معمولاً از خود داده بزرگتر است؛ برای ارسال یک عدد دما ممکن است صدها بایت سرآیند فرستاده شود. در MQTT سرآیند ثابت هر پیام فقط دو بایت است و بقیه آن، نام تاپیک و خود داده است. برای دستگاهی که هر چند ثانیه یک مقدار کوچک میفرستد، این تفاوت در مجموع ترافیک و مصرف باتری محسوس است.
فرمان از سرور به دستگاه#
با HTTP، سرور نمیتواند خودش سراغ دستگاه برود؛ دستگاه باید مدام بپرسد «فرمان جدیدی دارید؟» (polling). این کار یا کند است یا پرمصرف. در MQTT دستگاه روی تاپیکی مثل alice/lamp/cmd مشترک میشود و هر فرمانی بلافاصله از طریق همان اتصال باز به آن میرسد؛ حتی اگر دستگاه پشت NAT مودم خانگی باشد، چون اتصال را خود دستگاه برقرار کرده است.
قابلیتهایی که MQTT برای دستگاهها دارد#
- سطوح QoS برای تضمین تحویل پیام، حتی روی شبکه ناپایدار
- پیام ماندگار (retained) تا هر مشترک جدید آخرین وضعیت را فوراً بگیرد
- پیام وصیت (Last Will) تا قطع ناگهانی دستگاه به بقیه اعلام شود
- یک پیام برای چندین مشترک بدون اینکه فرستنده آنها را بشناسد
توضیح کامل این مفاهیم را در تاپیکها، QoS و پیام ماندگار در MQTT ببینید.
HTTP کجا هنوز انتخاب درستی است؟#
HTTP برای کارهایی که یک بار و گاهبهگاه اتفاق میافتند عالی است: دریافت تنظیمات، آپلود یک فایل، بهروزرسانی نرمافزار دستگاه، یا ارتباط با سرویسهای وب موجود. بسیاری از سیستمها از هر دو استفاده میکنند: MQTT برای دادههای لحظهای و فرمانها، HTTP برای کارهای جانبی.
اگر دستگاههای شما باید مدام داده بفرستند یا فوراً به فرمان واکنش نشان دهند، MQTT انتخاب طبیعیتری است. با پلن رایگان mqttcloud.ir میتوانید بدون راهاندازی سرور آن را امتحان کنید.
