پیام رسانی بلادرنگ با استفاده از Mqtt

گره منبع: 810816
هپتیک

این پست توسط Viraj Anchan، مهندس فول استک در Haptik نوشته شده است.

Haptik یک برنامه چت است که کاربران را به صفحه شخصی دیجیتال آنها متصل می کنددستیاران در زمان واقعی. هنگام چت با شخصی خود دستیار، برای انجام سریع کارها می خواهید تا حد امکان تاخیر کمتری داشته باشید.

هنگامی که پس از فارغ التحصیلی از کالج در می 2015 به Haptik پیوستم، اولین چالش فنی من یادگیری معماری پیام رسانی بود. در جولای 2015، من به CTO خود پیشنهاد دادم که از XMPP به MQTT تغییر مکان دهیم. برنامه های تلفن همراه ما (اندروید و iOS) و آتنا (ابزار چت وب مورد استفاده ما دستیاران) از XMPP برای پیام رسانی بلادرنگ استفاده کرد. ما با XMPP با مشکلات زیادی روبرو بودیم. برای اشاره به چند مورد، XMPP فاقد کیفیت خدمات داخلی (QoS) است. QoS توافقی است بین فرستنده و گیرنده پیام در مورد تضمین های ارسال پیام. از آنجایی که XMPP فاقد QoS داخلی بود، مجبور شدیم راه حل سفارشی خود را برای اطمینان از تحویل پیام ایجاد کنیم. همراه با آن جلسه XMPP یک سند XML طولانی و بزرگ است و هر مشتری باید از تجزیه کننده XML مبتنی بر رویداد استفاده کند. در مجموع، XMPP ثابت می‌کرد که هزینه‌های سربار و نگهداری زیادی برای ما دارد و ما به یک راه‌حل مقیاس‌پذیرتر نیاز داشتیم. در ژانویه 2016، سرانجام تصمیم گرفتیم از XMPP به MQTT تغییر دهیم.

MQTT یک پروتکل اتصال ماشین به ماشین/"اینترنت اشیا" سبک وزن است. MQTT مخفف MQ Telemetry Transport است. MQTT یک پروتکل پیام رسانی انتشار/اشتراک بسیار ساده و سبک است. این برای دستگاه های محدود، تاخیر بالا یا شبکه های غیر قابل اعتماد طراحی شده است. اصول طراحی عبارتند از به حداقل رساندن پهنای باند شبکه و منابع مورد نیاز دستگاه و در عین حال تلاش برای اطمینان از قابلیت اطمینان و درجه ای از اطمینان از تحویل. این اصول MQTT را برای IOT و برنامه‌های تلفن همراه که پهنای باند و توان باتری در بالاترین حد است، ایده‌آل می‌سازد.

5 دلیل که چرا ما از XMPP به MQTT تغییر مکان دادیم

1. سربار کمتر و سبک وزن
2. پشتیبانی از QoS (آتش و فراموش کردن، حداقل یک بار و دقیقا یک بار)
3. ترافیک کم
4. میخانه / مکانیزم فرعی
5. مصرف کم برق

MQTT 3 نوع QoS را برای ارسال پیام ارائه می دهد:

QoS 0 (آتش و فراموش کردن) - پیام حداکثر یک بار تحویل داده می شود. پیام های QoS 0 ذخیره نمی شوند. بنابراین، پیام های QoS 0 در صورت قطع ارتباط مشتری از بین می روند. در QoS 0، تحویل پیام تایید نمی شود. این سریعترین حالت انتقال است.

QoS 1 (حداقل یک بار) - پیام حداقل یک بار تحویل داده می شود. اگر فرستنده تأییدیه ای از گیرنده دریافت نکند ممکن است پیام ها چندین بار تحویل داده شوند. پیام ها باید در انتهای فرستنده ذخیره شوند، تا زمانی که فرستنده تأییدیه ای را از گیرنده دریافت کند.

QoS 2 (دقیقا یک بار) - پیام دقیقا یک بار تحویل داده می شود. QoS 2 تضمین می کند که پیام دقیقا یک بار توسط گیرنده دریافت می شود. پیام ها باید در انتهای فرستنده ذخیره شوند، تا زمانی که فرستنده تأییدیه ای را از گیرنده دریافت کند. این قابل اطمینان ترین حالت انتقال است. همچنین کندترین حالت انتقال است زیرا از یک توالی تأیید پیشرفته در مقایسه با QoS 1 استفاده می کند.

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

سرور MQTT ما توسط پشه. Mosquitto یک کارگزار پیام منبع باز است که MQTT را پیاده سازی می کند. این به زبان C نوشته شده است. نصب و استقرار آن آسان است. از TLS، Websockets پشتیبانی می کند و احراز هویت را از طریق نام کاربری/رمز عبور، کلیدهای از پیش به اشتراک گذاشته شده یا گواهی های مشتری TLS فراهم می کند. از ACL نیز پشتیبانی می کند. با استفاده از ACL، می توانید پیکربندی کنید که کدام کلاینت ها می توانند به کدام موضوعات دسترسی داشته باشند. تصمیم گرفتیم استفاده کنیم پاهو پایتون کتابخانه برای باطن باطن ما یک اتصال MQTT را حفظ می کند و پیام ها را از طریق خط لوله چت ما هدایت می کند.

نصب (پشه در اوبونتو)
sudo apt-get install mosquitto

نصب (paho-python)
پیپ نصب paho-python

در اینجا یک مشتری ساده است که مشترک می شود به یک موضوع (ورزش/کریکت/هند) و پیام های حاصل را چاپ می کند.

<i><span style="font-weight: 400;">import paho.mqtt.client as mqtt</span></i>

<i><span style="font-weight: 400;"># The callback for when the client receives a CONNACK response from the server.
</span></i><i><span style="font-weight: 400;">def on_connect(client, userdata, flags, rc):
</span></i><i><span style="font-weight: 400;">&nbsp; &nbsp; print("Connected with result code " + str(rc))
</span></i><i><span style="font-weight: 400;">&nbsp; &nbsp; client.subscribe("sports/cricket/india")</span></i>

<i><span style="font-weight: 400;"># The callback for when a PUBLISH message is received from the server.
</span></i><i><span style="font-weight: 400;">def on_message(client, userdata, msg):
</span></i><i><span style="font-weight: 400;">&nbsp; &nbsp; print(msg.topic +" " + str(msg.payload))
</span></i><i><span style="font-weight: 400;">&nbsp; &nbsp; client = mqtt.Client()</span></i><i>
</i>

<i><span style="font-weight: 400;">client.on_connect = on_connect
</span></i><i><span style="font-weight: 400;">client.on_message = on_message</span></i>

<i><span style="font-weight: 400;">client.connect("localhost", 1883, 60)</span></i>

<i><span style="font-weight: 400;">client.loop_forever() &nbsp;</span></i>

در اینجا یک مشتری ساده است که منتشر به یک موضوع (ورزش/کریکت/هند)

<i><span style="font-weight: 400;">import paho.mqtt.client as mqtt</span></i>

<i><span style="font-weight: 400;">client = mqtt.Client()
</span></i><i><span style="font-weight: 400;">client.connect("localhost", 1883, 60)
</span></i><i><span style="font-weight: 400;">client.publish("sports/cricket/india", "India wins Asia Cup 2016!")
</span></i><i><span style="font-weight: 400;">client.loop(2)</span></i>

MQTT کمک کرده است تا برنامه ما سبک باشد و از تحویل پیام قابل اعتماد در زمان واقعی اطمینان حاصل شود. MQTT یک پروتکل شگفت انگیز است که کاربردهای زیادی در ارتباطات موبایل، IOT و M2M دارد. اگر می خواهید یک پروتکل پیام رسانی سبک و قابل اعتماد داشته باشید، پس حتما باید MQTT را در نظر بگیرید.

آیا می خواهید بخشی از چیزهای شگفت انگیزی باشید که می سازیم؟ جلوترش رو نگاه نکن! با ما در تماس باشید hello@haptik.co

Source: https://chatbotslife.com/real-time-messaging-using-mqtt-71e7a4c0d868?source=rss—-a49517e4c30b—4

تمبر زمان:

بیشتر از زندگی چت بات ها - متوسط