تاپیک ها در پروتکل MQTT (جلسه ششم)

تاریخ انتشار : 2020/08/02

اهداف

در جلسه قبل انتشار، اشتراک و لغو اشتراک در پروتکل MQTT را بررسی کردیم. در این جلسه قصد داریم تاپیک ها در پروتکل MQTT را شرح دهیم. تاپیک یک موضوع مهم در پروتکل ارتباطی MQTT به حساب می آید. فهم درست این ویژگی و یادگیری مفاهیم مرتبط با آن در پیکربندی پروتکل ارتباطی شما نقش ویژه ای خواهد داشت. ابتدا تعریفی از تاپیک در پروتکل MQTT را ارائه خواهیم داد. سپس ساختار تاپیک را بررسی کرده و در نهایت توصیه های کاربردی در بکارگیری تاپیک ها را ارائه می دهیم. 

 

تعریف تاپیک (topic)

در پروتکل MQTT، واژه تاپیک به یک رشته UTF-8 اشاره دارد که بروکر برای فیلتر کردن پیام ها استفاده می کند. در واقع تاپیک پیامی است که موضوع داده را مشخص کرده (مثلا topic=temperature) و برای فیلتر کردن پیام ها استفاده می شود به این صورت که بروکر از طریق تاپیک مشخص می کند کدام کلاینت ها باید پیام مربوط به این تاپیک (در اینجا دما) را دریافت کنند و کدام یک دریافت نکنند. برای فهم دقیق تر این مساله، سیستم هوشمندی را در نظر بگیرید که از یک سنسور دما و از یک سنسور رطوبت استفاده می کند. مقدار دمای اندازه گیری شده تحت تاپیک دما به بروکر ارسال شده و بروکر مقدار اندازه گیری شده را به کلاینت مورد نظر که می تواند یک اپلیکیشن تلفن همراه باشد ارسال کرده و کاربر مقدار دما را در مکان مشخص شده در اپلیکیشن مشاهده می کند. این مساله برای رطوبت اندازه گیری شده نیز صادق است. 

MQTT topics

 

تاپیک شامل یک یا چند سطح تاپیک (topic level) است. هر سطح تاپیک توسط جداکننده سطح تاپیک (topic level separator) از سطح قبلی جدا می شود. 

topic levels

 

در مقایسه با صف پیام، تاپیک ها در پروتکل MQTT بسیار سبک وزن هستند. کلاینت ها از قبل نیازی به سابسکرایب کردن تاپیکی که می خواهند پیام را روی آن ارسال کنند ندارند. بروکر نیز هر تاپیک معتبری را بدون هیچ تنظیمات یا پیکربندی اولیه ای می پذیرد. 

توجه داشته باشید که هر تاپیکی می بایست حداقل یک کاراکتر داشته باشد. تاپیک ها حساس به بزرگ و کوچک بودن حروف هستند برای مثال myhome/temperature با Myhome/temperature دو تاپیک کاملا مجزا هستند. در نهایت، کاراکتر جداکننده سطح تاپیک “/” به تنهایی یک تاپیک معتبر است. 

 

کاراکترهای استثنایی (wildcards)

هنگامی که یک کلاینت به تاپیکی سابسکرایب می کند، میتواند به عبارت دقیق آن تاپیک سابسکرایب کند یا با استفاده از کاراکترهای استثنائی به چندین تاپیک مختلف سابسکرایب کرده و گوش کند. دو کاراکتر استثنائی در تاپیک ها وجود دارد که به wildcards معروف هستند: تک سطحی و چند سطحی.

 

تک سطحی (+):

این کاراکتر فقط یک سطح را شامل شده و در هر کجای تاپیک قرار گیرد، به تاپیک های متفاوتی که  فقط در آن سطح باهم متفاوت اند گوش می دهد. برای مثال تاپیک زیر را ببینید:

Single-level wildcard

 

در این تاپیک به جای کاراکتر “+” هر متنی باشد (که فقط یک سطح را شامل می شود)، کلاینت به تمامی آن تاپیک ها گوش می دهد. برای مثال، هر کلاینتی که به تاپیک بالا سابسکرایب کند، به تاپیک های زیر گوش می دهد.

Single-level wildcard example

 

چند سطحی (#):

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

Multi-level wildcard

 

در این تاپیک به جای کاراکتر “#” هر متنی باشد (که چندین سطح را شامل می شود)، کلاینت به تمامی آن تاپیک ها گوش می دهد. برای مثال، هر کلاینتی که به تاپیک بالا سابسکرایب کند، به تاپیک های زیر گوش می دهد.

multi-level wildcard example

 

تاپیک های شروع شونده با “$”

به طور کلی،  شما می توانید تاپیک ها را مطابق میل خود بنویسید. با این حال، تاپیک هایی که با “$” شروع می شوند برای مقاصد دیگری به کار میروند. تاپیک هایی که با “$” شروع می شوند برای آمار داخلی بروکر MQTT رزرو شده اند و کلاینت ها نمی توانند پیام ها را تحت این تاپیک ها منتشر کنند. 

 

توصیه های کلی برای استفاده از تاپیک ها

  • از کاراکتر “/” در ابتدای تاپیک استفاده نکنید.
  • هرگز ار فضای خالی “space” در تاپیک ها استفاده نکنید.
  • تاپیک را کوتاه و مختصر نگه دارید.
  • فقط از کاراکترهای ASCII استفاده کنید، از کاراکترهای غیر قابل پرینت اجتناب کنید.
  • شناسه منحصر به فرد یا شناسه کلاینت را در تاپیک قرار دهید.
  • به کارکتر “#” سابسکرایب نکنید.
  • توسعه پذیری را در ساختاربندی تاپیک ها فراموش نکنید.
  • از تاپیک های خاص استفاده کنید نه از تاپیک های کلی.

 

نتیجه گیری

در این آموزش تاپیک ها در پروتکل MQTT را شرح دادیم. فهمیدیم تاپیک پیامی است که موضوع داده را مشخص کرده و برای فیلتر کردن پیام ها استفاده می شود. از طرفی، ساختار تاپیک بر جسب سطح تاپیک را بررسی کرده و با ویژگی های هر کدام آشنا شدیم. در جلسه بعد راه اندازی بروکر MQTT در سرور مجازی (VPS) را آموزش خواهیم داد. با ما همراه باشید.

برخی از مشتریان

لوگو شریف
لوگو آمد
لوگو شهرداری تهران
لوگو دانشگاه تهران
لوگو ساتکاپ
لوگو دانشگاه ارومیه
logofa