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

کتاب الکترونیکی MQTT Essentials را دریافت کنید
72 صفحه آموزش و یادگیری MQTT برای مبتدیان و متخصصان.
در اینجا سریع مفاهیم اصلی وجود دارد:
- انتشار/مشترک شدن مشتری که پیام (ناشر) را از مشتری یا مشتریانی که پیام ها (مشترکان) را دریافت می کنند ارسال می کند.
- MQTT از موضوع (موضوع) پیام استفاده می کند تا تعیین کند که کدام پیام به کدام مشتری (مشترک) می رود. یک موضوع یک رشته با ساختار سلسله مراتبی است که می تواند برای فیلتر کردن و پیام های مسیر (جزئیات بیشتر) استفاده شود.
آخرین پست ما نمای سطح بالایی از مدل انتشار/اشتراک و چگونگی تفاوت آن با یک صف پیام سنتی را به شما داد. این پست یک رویکرد عملی دارد و با دانش اساسی در مورد MQTT پر شده است: تعاریف مربوط به اصطلاحات مشتری و کارگزار MQTT ، مبانی اتصال MQTT ، پیام اتصال با پارامترهای آن و ایجاد ارتباط از طریق تأیید کارگزار.
آشنایی با مشتری MQTT و کارگزار MQTT
از آنجا که MQTT ناشر را از مشترکین جدا می کند ، اتصالات مشتری همیشه توسط یک کارگزار اداره می شود. قبل از اینکه به جزئیات این اتصالات بپردازیم ، در مورد منظور ما از مشتری و کارگزار روشن خواهیم بود.
مشتری
وقتی در مورد مشتری صحبت می کنیم ، تقریباً همیشه به معنای مشتری MQTT هستیم. ناشران و مشترکین هم مشتری MQTT هستند. برچسب های ناشر و مشترکین به این موضوع اشاره می کنند که آیا مشتری در حال حاضر پیام ها را منتشر می کند یا برای دریافت پیام مشترک است (انتشار و اشتراک عملکرد نیز می تواند در همان مشتری MQTT پیاده سازی شود). یک مشتری MQTT هر دستگاهی است (از یک کنترلر میکرو تا یک سرور تمام عیار) که یک کتابخانه MQTT را اجرا می کند و به یک کارگزار MQTT از طریق یک شبکه متصل می شود. به عنوان مثال ، مشتری MQTT می تواند یک دستگاه بسیار کوچک و محدود با منابع باشد که از طریق یک شبکه بی سیم وصل می شود و دارای یک کتابخانه با حداقل لخت است. مشتری MQTT همچنین می تواند یک رایانه معمولی باشد که یک مشتری Graphical MQTT را برای اهداف آزمایش اداره می کند. در اصل ، هر دستگاهی که MQTT را از روی پشته TCP/IP صحبت کند ، می تواند مشتری MQTT نامیده شود. اجرای مشتری پروتکل MQTT بسیار مستقیم و روان است. سهولت اجرای یکی از دلایلی است که MQTT از نظر ایده آل برای دستگاه های کوچک مناسب است. کتابخانه های مشتری MQTT برای انواع زیادی از زبان های برنامه نویسی در دسترس هستند. به عنوان مثال ، Android ، Arduino ، C ، C ++ ، C#، Go ، iOS ، Java ، JavaScript و .net. می توانید یک لیست کامل در ویکی MQTT مشاهده کنید.
دلال
همتای مشتری MQTT کارگزار MQTT است. کارگزار در قلب هر پروتکل انتشار/مشترک است. بسته به اجرای ، یک کارگزار می تواند تا میلیون ها مشتری همزمان MQTT را اداره کند.
کارگزار مسئول دریافت همه پیام ها، فیلتر کردن پیام ها، تعیین مشترکین هر پیام و ارسال پیام به این مشتریان مشترک است. کارگزار همچنین داده های جلسه همه مشتریانی را که جلسات دائمی دارند، از جمله اشتراک ها و پیام های از دست رفته (جزئیات بیشتر) را نگهداری می کند. یکی دیگر از وظایف کارگزار، احراز هویت و مجوز مشتریان است. معمولاً کارگزار قابل توسعه است که احراز هویت سفارشی، مجوز و ادغام در سیستم های باطن را تسهیل می کند. یکپارچه سازی از اهمیت ویژه ای برخوردار است زیرا کارگزار اغلب مؤلفه ای است که مستقیماً در اینترنت در معرض دید قرار می گیرد، مشتریان زیادی را مدیریت می کند و باید پیام ها را به سیستم های تحلیل و پردازش پایین دستی ارسال کند. همانطور که در پست قبلی بحث شد، اشتراک در همه پیام ها واقعا یک گزینه نیست. به طور خلاصه، کارگزار مرکز مرکزی است که هر پیامی باید از آن عبور کند. بنابراین، مهم است که کارگزار شما بسیار مقیاس پذیر، قابل ادغام با سیستم های پشتیبان، نظارت آسان و (البته) مقاوم در برابر شکست باشد. HiveMQ این الزامات را با استفاده از پیشرفته ترین پردازش شبکه مبتنی بر رویداد، یک سیستم توسعه باز و ارائه دهندگان نظارت استاندارد برآورده می کند.
اتصال MQTT
پروتکل MQTT مبتنی بر TCP/IP است. هم مشتری و هم کارگزار باید یک پشته TCP/IP داشته باشند.

اتصال MQTT همیشه بین یک مشتری و کارگزار است. مشتریان هرگز مستقیماً به یکدیگر متصل نمی شوند. برای شروع یک اتصال، مشتری یک پیام CONNECT را به کارگزار ارسال می کند. کارگزار با یک پیام CONNACK و یک کد وضعیت پاسخ می دهد. هنگامی که اتصال برقرار شد، کارگزار آن را باز نگه می دارد تا زمانی که مشتری دستور قطع اتصال را ارسال کند یا اتصال قطع شود.
اتصال MQTT از طریق NAT
در بسیاری از موارد استفاده رایج، کلاینت MQTT در پشت روتری قرار دارد که از ترجمه آدرس شبکه (NAT) برای ترجمه از آدرس شبکه خصوصی (مانند 192. 168. x. x، 10. 0. x. x) به آدرس عمومی استفاده می کند. همانطور که قبلاً اشاره کردیم، مشتری MQTT با ارسال یک پیام CONNECT به کارگزار، اتصال را آغاز می کند. از آنجایی که کارگزار یک آدرس عمومی دارد و اتصال را برای ارسال و دریافت دوطرفه پیام ها (پس از اتصال اولیه) باز نگه می دارد، هیچ مشکلی با کلاینت هایی که پشت NAT قرار دارند، وجود ندارد.
کلاینت با پیام CONNECT ارتباط برقرار می کند
حال بیایید به پیام فرمان MQTT Connect نگاه کنیم. برای شروع اتصال ، مشتری یک پیام فرمان را به کارگزار ارسال می کند. اگر این پیام اتصال ناقص باشد (مطابق مشخصات MQTT) یا زمان زیادی بین باز کردن سوکت شبکه و ارسال پیام اتصال می گذرد ، کارگزار اتصال را می بندد. این رفتار باعث می شود مشتری های مخرب که می توانند کارگزار را کاهش دهند ، جلوگیری کند. یک مشتری خوش اخلاق MQTT 3 یک پیام اتصال با محتوای زیر (از جمله موارد دیگر) ارسال می کند:

برخی از اطلاعات موجود در یک پیام اتصال احتمالاً برای مجریان یک کتابخانه MQTT جالب تر است نه برای کاربران آن کتابخانه. برای تمام جزئیات ، به مشخصات MQTT 3. 1. 1 نگاهی بیندازید.
ما روی گزینه های زیر تمرکز خواهیم کرد:
شناسه مشتری
شناسه مشتری (ClientID) هر مشتری MQTT را که به یک کارگزار MQTT متصل می شود ، شناسایی می کند. کارگزار از ClientID برای شناسایی مشتری و وضعیت فعلی مشتری استفاده می کند. بنابراین ، این شناسه باید برای هر مشتری و کارگزار بی نظیر باشد. در MQTT 3. 1. 1 می توانید یک مشتری خالی را ارسال کنید ، اگر نیازی به کشوری ندارید که توسط کارگزار برگزار شود. مشتری خالی منجر به اتصال بدون هیچ وضعیتی می شود. در این حالت ، پرچم جلسه تمیز باید روی درست تنظیم شود یا کارگزار اتصال را رد کند.
جلسه تمیز
پرچم جلسه تمیز به کارگزار می گوید که آیا مشتری می خواهد یک جلسه مداوم ایجاد کند یا خیر. در یک جلسه مداوم (پاکسازی = نادرست) ، کارگزار کلیه اشتراک ها را برای مشتری و کلیه پیام های از دست رفته برای مشتری که با کیفیت خدمات (QoS) سطح 1 یا 2 مشترک هستند ، ذخیره می کند. اگر جلسه پایدار نیست (پاکسازی = درست است) ، کارگزار چیزی را برای مشتری ذخیره نمی کند و تمام اطلاعات را از هر جلسه مداوم قبلی پاک می کند.
نام کاربری/رمز عبور
MQTT می تواند نام کاربری و رمز عبور را برای تأیید اعتبار و مجوز مشتری ارسال کند. با این حال ، اگر این اطلاعات رمزگذاری نشده یا هشدار داده نشده باشد (یا با اجرای یا TLS) ، رمز عبور به متن ساده ارسال می شود. ما استفاده از نام کاربری و رمزهای عبور را به همراه حمل و نقل ایمن توصیه می کنیم. کارگزاران مانند HiveMQ می توانند مشتری ها را با گواهی SSL تأیید کنند ، بنابراین به نام کاربری و رمز عبور لازم نیست.
پیام خواهد کرد
آخرین پیام وصیت نامه بخشی از ویژگی آخرین وصیت نامه و عهد (LWT) MQTT است. این پیام هنگامی که مشتری به طور نامحسوس قطع می شود ، به سایر مشتری ها اطلاع می دهد. هنگامی که مشتری به هم وصل می شود ، می تواند آخرین وصیت نامه را در قالب پیام MQTT و موضوع در پیام اتصال به کارگزار ارائه دهد. اگر مشتری به طرز ناخوشایندی قطع شود ، کارگزار پیام LWT را از طرف مشتری ارسال می کند. می توانید در مورد LWT در قسمت 9 این سریال اطلاعات بیشتری کسب کنید.
زنده بمان
Keep Alive یک بازه زمانی در چند ثانیه است که مشتری هنگام برقراری ارتباط با کارگزار مشخص و ارتباط برقرار می کند. این بازه طولانی ترین دوره زمانی را که کارگزار و مشتری می توانند بدون ارسال پیام تحمل کنند ، تعریف می کند. مشتری متعهد می شود پیام های درخواست پینگ معمولی را به کارگزار ارسال کند. کارگزار با پاسخ پینگ پاسخ می دهد. این روش به هر دو طرف اجازه می دهد تا مشخص کنند که آیا دیگری هنوز در دسترس است یا خیر. برای کسب اطلاعات دقیق در مورد MQTT ، عملکرد زنده را به قسمت 10 این سری مراجعه کنید.
در اصل ، این تمام اطلاعاتی است که شما برای اتصال به یک کارگزار MQTT از یک مشتری MQTT 3. 1. 1 نیاز دارید. کتابخانه های انفرادی اغلب گزینه های دیگری دارند که می توانید پیکربندی کنید. به عنوان مثال ، روشی که پیام های صف در یک اجرای خاص ذخیره می شوند.
پاسخ کارگزار با پیام کانک
هنگامی که یک کارگزار پیام اتصال را دریافت می کند ، موظف است با یک پیام Connack پاسخ دهد.
پیام CONNACK شامل دو ورودی داده است:
- جلسه پرچم فعلی
- یک کد بازگشت اتصال
جلسه پرچم فعلی
پرچم فعلی جلسه به مشتری می گوید که آیا کارگزار قبلاً یک جلسه مداوم از تعامل قبلی با مشتری دارد یا خیر. هنگامی که مشتری با جلسه تمیز تنظیم می شود ، پرچم فعلی جلسه همیشه نادرست است زیرا هیچ جلسه ای در دسترس نیست. اگر مشتری با جلسه تمیز به False متصل شود ، دو امکان وجود دارد: اگر اطلاعات جلسه برای ClientID در دسترس است. و کارگزار اطلاعات جلسه را ذخیره کرده است ، پرچم فعلی جلسه درست است. در غیر این صورت ، اگر کارگزار هیچ اطلاعات جلسه ای برای ClientID نداشته باشد ، پرچم فعلی جلسه نادرست است. این پرچم در MQTT 3. 1. 1 اضافه شده است تا به مشتریان کمک کند تا تعیین کنند که آیا آنها نیاز به عضویت در موضوعات دارند یا اینکه مباحث هنوز در یک جلسه مداوم ذخیره می شوند.
اتصال کد بازگشت
پرچم دوم در پیام CONNACK پرچم تصدیق Connect است. این پرچم حاوی یک کد برگشتی است که به مشتری می گوید تلاش اتصال موفقیت آمیز بوده است یا خیر.

در یک نگاه، کدهای بازگشت را مشاهده می کنید:
| کد بازگشت | پاسخ کد بازگشت |
| 0 | اتصال پذیرفته شد |
| 1 | اتصال رد شد، نسخه پروتکل غیرقابل قبول |
| 2 | اتصال رد شد، شناسه رد شد |
| 3 | اتصال رد شد، سرور در دسترس نیست |
| 4 | اتصال رد شد، نام کاربری یا رمز عبور نامناسب |
| 5 | اتصال رد شد، مجاز نیست |
برای توضیح بیشتر در مورد هر یک از این کدها، مشخصات MQTT را ببینید.
به پایان می رسد شل
ممکن است تعجب کنید که چگونه MQTT یک اتصال را حتی زمانی که هیچ پیامی ارسال نمی شود باز نگه می دارد، یا چگونه می دانید که اتصال قطع شده است. نگران نباشید، ما بعداً یک شماره کامل از مجموعه موارد ضروری را به این موضوعات اختصاص می دهیم.
این پایان بخش سوم در سری MQTT Essentials ما است. امیدواریم حداقل یک چیز جدید در مورد MQTT یاد گرفته باشید و هفته آینده برای پست ما در مورد انتشار، اشتراک و لغو اشتراک در MQTT دوباره به ما بپیوندید.
برای دریافت قسمت بعدی این مجموعه به محض انتشار، ایمیل خود را در فرم اشتراک زیر وارد کنید. اگر RSS را ترجیح می دهید، می توانید در اینجا مشترک فید RSS ما شوید. برای دانستن تمام اصطلاحات کلیدی MQTT، واژه نامه MQTT را بررسی کنید.
شناسه های مشتری یکسان، نام کاربری یا رمز عبور اشتباه و نشانی اینترنتی کارگزار نادرست
پورت 1883 برای ارتباطات غیر ایمن و پورت 8883 برای ارتباطات ایمن
به اندازه کافی طولانی برای کاهش ترافیک، و به اندازه کافی کوتاه برای تشخیص قطع شدن اتصال.
با استفاده از یک آدرس IP محلی یا لوکال هاست به عنوان URL کارگزار.
با استفاده از کتابخانه پایتون MQTT مانند PAHO
درباره تیم HiveMQ
ما عاشق نوشتن در مورد MQTT، پروتکل های IoT و معماری به طور کلی هستیم. کارشناسان ما اینجا هستند تا به شما کمک کنند، بنابراین اگر می توانیم کمک کنیم با ما تماس بگیرید! با ما تماس بگیرید
در HiveMQ به روز باشید
برای اطلاع از به روز رسانی های HiveMQ، MQTT و IoT در خبرنامه ما مشترک شوید.
با کلیک بر روی دکمه اشتراک، رضایت خود را با استفاده از داده های خود مطابق با خط مشی رازداری ما اعلام می کنید. می توانید در هر زمان رضایت خود را با تأثیرات بعدی لغو کنید.
این پست را دوست دارید؟
اخبار HiveMQ را مستقیماً به صندوق ورودی خود تحویل بگیرید
با کلیک بر روی دکمه اشتراک، رضایت خود را برای استفاده از داده های خود مطابق با خط مشی رازداری ما اعلام می کنید. شما می توانید رضایت خود را در هر زمان با تأثیرات بعدی لغو کنید.
با کلیک بر روی دکمه اشتراک، رضایت خود را برای استفاده از داده های خود مطابق با خط مشی رازداری ما اعلام می کنید. شما می توانید رضایت خود را در هر زمان با تأثیرات بعدی لغو کنید.
فارکس وکسب درامد...
ما را در سایت فارکس وکسب درامد دنبال می کنید
برچسب :
نویسنده : احمد قانع پور
بازدید : 49
تاريخ : يکشنبه
20 فروردين
1402 ساعت: :