Reaalajas sõnumside Mqtt

Allikasõlm: 810816
Haptik

Selle postituse on kirjutanud Viraj Anchan, Haptiku täieliku virna insener.

Haptik on vestlusrakendus, mis ühendab kasutajad nende digitaalse isikliku aassistendid reaalajas. Kui vestlete oma isiklikuga assistent, soovite asjade kiireks tegemiseks võimalikult vähe viivitust.

Kui liitusin Haptikuga pärast kolledži lõpetamist 2015. aasta mais, oli minu esimene tehniline väljakutse sõnumside arhitektuuri õppimine. 2015. aasta juulis tegin meie CTO-le ettepaneku minna üle XMPP-lt MQTT-le. Meie mobiilirakendused (Android ja iOS) ja Athena (meie kasutatav veebivestluse tööriist assistendid) kasutas reaalajas sõnumside jaoks XMPP-d. Meil oli XMPP-ga palju probleeme. Mõnede väljatoomiseks puudub XMPP-l sisseehitatud teenuse kvaliteet (QoS). QoS on sõnumi saatja ja saaja vaheline kokkulepe sõnumi edastamise garantiide kohta. Kuna XMPP-l puudus sisseehitatud QoS, pidime sõnumi edastamise tagamiseks looma oma kohandatud lahenduse. Lisaks sellele XMPP-seansile on üks suur pikk XML-dokument ja iga klient peab kasutama sündmusepõhist XML-parserit. Kokkuvõttes osutus XMPP meie jaoks palju üldkulusid ja hooldust ning vajasime paremat skaleeritavamat lahendust. 2016. aasta jaanuaris otsustasime lõpuks XMPP-lt üle minna MQTT-le.

MQTT on kerge masinatevaheline / asjade Interneti-ühenduse protokoll. MQTT tähistab MQ telemeetriatransporti. MQTT on äärmiselt lihtne ja kerge avaldamis-/tellimisprotokoll. See on mõeldud piiratud seadmete, suure latentsusajaga või ebausaldusväärsete võrkude jaoks. Disainipõhimõtted on võrgu ribalaiuse ja seadme ressursivajaduse minimeerimine, püüdes samal ajal tagada töökindluse ja teatud määral kohaletoimetamise kindlust. Need põhimõtted muudavad MQTT ideaalseks IOT- ja mobiilirakenduste jaoks, kus ribalaius ja akutoide on esmaklassilised.

5 põhjust, miks läksime XMPP-lt üle MQTT-le

1. Vähem üldkulusid ja kerge
2. Toetab QoS-i (tulista ja unusta, vähemalt üks kord ja täpselt üks kord)
3. Madal hoida elus liiklust
4. Pub/alammehhanism
5. Madal energiakasutus

MQTT pakub sõnumite edastamiseks kolme tüüpi QoS-i:

QoS 0 (tule ja unusta) – sõnum edastatakse kõige rohkem üks kord. QoS 0 sõnumeid ei salvestata. Seetõttu kaovad QoS 0 sõnumid kliendi katkestamisel. QoS 0 puhul ei kinnitata sõnumi edastamist. See on kiireim edastusviis.

QoS 1 (vähemalt üks kord) – sõnum edastatakse vähemalt üks kord. Sõnumeid võidakse edastada mitu korda, kui saatja ei saa vastuvõtjalt kinnitust. Sõnumid tuleb salvestada saatja lõpus, kuni saatja saab vastuvõtjalt kinnituse.

QoS 2 (täpselt üks kord) – sõnum edastatakse täpselt üks kord. QoS 2 tagab, et vastuvõtja võtab sõnumi vastu täpselt ühe korra. Sõnumid tuleb salvestada saatja lõpus, kuni saatja saab vastuvõtjalt kinnituse. See on kõige usaldusväärsem edastusviis. See on ka kõige aeglasem edastusviis, kuna see kasutab QoS 1-ga võrreldes täiustatud kinnitusjärjestust.

MQTT kasutab mustrit nimega avalda/telli. MQTT maakleriga ühendub mitu klienti. Kliendid saavad teemat avaldada või tellida. Teemasid kasutab maakler, et otsustada, kes sõnumi saab. Maakler ja MQTT toimivad lihtsa ja ühise liidesena, millega saab ühenduse luua.

Meie MQTT-serveri toiteallikaks on Sääsk. Mosquitto on avatud lähtekoodiga sõnumite vahendaja, mis rakendab MQTT-d. See on kirjutatud C keeles. Mosquittot on lihtne paigaldada ja juurutada. See toetab TLS-i, veebisockette ja pakub autentimist kas kasutajanime/parooli, eeljagatud võtmete või TLS-i kliendisertifikaatide kaudu. Samuti toetab see ACL-i. ACL-i abil saate konfigureerida, millised kliendid millistele teemadele juurde pääsevad. Otsustasime kasutada Paho Python taustaprogrammi raamatukogu. Meie taustaprogramm säilitab MQTT-ühenduse ja suunab sõnumid läbi meie vestlustoru.

Installimine (sääsk ubuntus)
sudo apt-get install mosquitto

Installimine (paho-python)
pip install paho-python

Siin on lihtne klient tellib teemale (sport/kriket/india) ja prindib saadud sõnumid välja.

<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>

Siin on lihtne klient avaldab teemale (sport/kriket/india)

<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 on aidanud muuta meie rakenduse kergeks ja tagada reaalajas usaldusväärse sõnumiedastuse. MQTT on hämmastav protokoll, millel on palju rakendusi mobiili-, IOT- ja M2M-suhtluses. Kui soovite kerget ja usaldusväärset sõnumsideprotokolli, peaksite kindlasti kaaluma MQTT-d.

Kas soovite saada osa nendest hämmastavatest asjadest, mida me ehitame? Ära enam otsi! Võtke meiega ühendust aadressil hello@haptik.co

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

Ajatempel:

Veel alates Chatbots Life – keskmine