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

(قسمت دوم) تاپیک ها در MQTT

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


تاپیک ها در MQTT یک فرم آدرس دهی هستند که اجازه اشتراک اطلاعات را به کلاینت ها می دهد.

ساختار تاپیک ها مثل ساختار آدرس دهی فولدرها بصورت سلسه مراتبی با استفاده از اسلش(/) هست. با استفاده از این سیستم می توانید ساختارهای نامگذاری کاربر پسندی داشته باشید.

اسامی تاپیک:

  • به بزرگ کوچک بودن حروف حساس هستند
  • باید از UTF-8 استفاده کرد
  • حداقل باید یک کاراکتر داشته باشد

به جز SYS topic$ هیچ تاپیکی با ساختار استاندارد و بصورت پیش فرض وجود ندارد و تنها تاپیکی هست که توسط بروکر ایجاد شده است.

بقیه تاپیک ها توسط کلاینت های انتشار دهنده و گیرنده پیام ها ایجاد می شوند و دایمی نیستند. یک تاپیک زمانی وجود دارد که یک کلاینت در آن سابسکرایب کند و یا بروکر دارای مقدار retained باشد و یا last will messages برای تاپیک ذخیره شده باشد.

$SYS topic

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

اشتراک (Subscribing) در تاپیک ها

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

1) #/ کاراکتر هش/ برای چندین کاراکتر

2) +/ کاراکتر پلاس/ برای یک کاراکتر

Wildcards برای نمایش یک یا چندین سطح بکار می رود مانند #/house/و نمی تواند به عنوان بخشی از یک نام باشد مثل #hou

نمونه ای از Wildcards های مناسب

سابسکرایب روی تاپیک #/house موارد زیر را ساپورت می کند

  • house/room1/main-light
  • house/room1/alarm
  • house/garage/main-light
  • house/main-door
  • etc

سابسکرایب روی house/+/main-light

  • house/room1/main-light
  • house/room2/main-light
  • house/garage/main-light

ولی موارد زیر را ساپورت نمی کند

  • house/room1/side-light
  • house/room2/side-light
  • نمونه ای از تاپیک های INVALID
  • house+ – Reason- no topic level
  • house# – Reason- no topic level

انتشار روی یک تاپیک

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

چه زمانی یک تاپیک ایجاد می شود

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

کلاینتی یک پیام را روی یک تاپیک پابلیش کند و مقدار retained را برابر TRUE قرار دهد.

چه زمانی تاپیک ها از روی بروکر حذف می شوند

وقتی که آخرین کلاینتی که روی تاپیک سابسکرایب کرده ارتباطش با بروکر قطع شود یا وقتی کلاینتی با مقدار TRUE برای clean session تنظیم شود.

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



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