ziba bahari
ziba bahari
خواندن ۳ دقیقه·۴ سال پیش

(قسمت سوم)انتشار و سابسکرایب در MQTT

در قسمت قبلی درمورد اینکه MQTT چطور کار می کند و topic ها در MQTT آشنا شدیم و همچنین در این قسمت با فرآیند انتشار و سابسکرایب در MQTT آشنا خواهیم شد و در آخر یک مثال عملی برای استفاده از بروکر Mosquitto و پیاده سازی کلاینت ها برای ارسال و دریافت پیام خواهیم داشت.

در MQTT برای ارسال پیام(publishing) و دریافت پیام از MQTT کلاینت باید در تاپیک موردنظر سابسکرایب کند.

یک کلاینت می تواند در هر تاپیکی سابسکرایب کند مگر اینکه بروکر دسترسی آن را محدود کند.

یک کلاینت بصورت مستقیم نمی تواند پیام را به کلاینت دیگری ارسال کند و اطلاعی از این ندارد که پیام توسط کلاینت دیگری دریافت شد یا نه.

یک کلاینت پیام را نمی تواند به گروهی از تاپیک ها ارسال کند درصورتی که یک پیام می تواند توسط چندین کلاینت دریافت شود.

QOS روی پیام های منتشر شده

سه سطح از QOS توسط MQTT پشتیبانی می شود

  • QOS -0 –حالت پیش فرض هست و تضمینی در ارسال پیام وجود ندارد
  • QOS -1 –تضمین تحویل پیام را دارد ولی شاید تکراری باشد
  • QOS -2 -تضمین تحویل پیام بدون تکرار

پیامی که منتشر می شود از یکی از این سه سطوح استفاده می کند و حالت پیش فرض آن QOS -0 است.اگر شما می خواهید اطمینان حاصل کنید که سابسکرایبر حتما پیام را دریافت کرده است باید مقدار 1 یا 2 را قرار دهید.

درصورت تنظیم 1 یا 2 برای QOS سرور یک پیام تصدیق را برمی گرداند. این کار منجر به ارسال چندین پیام بین کلاینت ها و سرور می شود. پیام های منتشر شده با QOS 0 فقط به یک پیام نیاز دارند و توسط سرور تأیید نمی شوند. پیام های منتشر شده با QOS 1 یا 2 همچنین دارای یک شماره شناسه پیام(MID) هستند که می تواند برای ردیابی پیام استفاده شود.

انتشار پیام و فلگ Retain

وقتی یک کلاینت اقدام به ارسال پیام به بروکر می کند

  • تاپیک پیام
  • مقدار QOS
  • Retain Flag : آیا پیام باید حفظ شود که با مقدار Retain Flag تعیین می شود

مقدار Retain Flag بصورت پیش فرض False هست به این معنی که بروکر پیام را نگه نمی دارد.

مقدار QOS روی نگهداری پیام تاثیری ندارد.

کاربرد اصلی این مورد برای حسگرهایی است که تغییر زیادی نمی کنند و وضعیت خود را به ندرت منتشر می کنند.به عنوان مثال ، اگر سنسور درب داشته باشید ، انتشار وضعیت آن در هر ثانیه وقتی تقریباً همیشه وضعیت یکسان باشد ، چندان منطقی نیست.

بعد از منتشر کردن پیام چه اتفاقی می افتد؟

1. پس از دریافت پیام توسط کلاینت، چه اتفاقی می افتد؟

2. در صورت نبودن سابسکرایبر، چه اتفاقی برای پیام منتشر شده می افتد؟

برای پاسخ به این سوالات پخش تلویزیون یا رادیو را در نظر بگیرید

اگر در پخش یک برنامه ملحق نشوید ، به راحتی آن را از دست می دهید!

بنابراین برای سوال 1 و سوال 2 پاسخ این است - پیام از بروکر حذف می شود.

وقتی کلاینت پیامی را بر روی یک تاپیک منتشر می کند، بروکر آن پیام را به کلاینت هایی که بر روی آن تاپیک سابسکرایب کرده اند، توزیع می کند. پس از ارسال پیام به آن کلاینت، پیام از بروکر حذف می شود.

اگر هیچ مشترکی در این تاپیک سابسکرایب نشده باشد یا در حال حاضر به اینترنت متصل نباشد ، پیام از بروکر حذف می شود. به طور کلی بروکر پیام ها را ذخیره نمی کند.

توجه: پیامهای حفظ شده ، ارتباطات مداوم و مقدار QOS می تواند باعث شود که پیامها به طور موقت در بروکر/ سرور ذخیره شوند.

سابسکرایب

برای دریافت پیام در مورد یک موضوع باید مشترک(subscriber) تاپیک یا تاپیک هایی شوید.

هنگام سابسکرایب شدن در یک تاپیک، باید QOS تاپیک را نیز تنظیم کنید.

هنگامی که در یک تاپیک یا چندین تاپیک سابسکرایب می شوید ، به طور موثر به بروکر می گویید که پیام های آن تاپیک را برای شما ارسال کند.

برای ارسال پیام به مشترک ، بروکر از همان مکانیسم انتشار استفاده می کند که توسط کلاینت برای انتشار پیام روی بروکر استفاده می شود.

منبع: http://www.steves-internet-guide.com/

mqttbrokersubscriberpublisher
شاید از این پست‌ها خوشتان بیاید