Enne teksti alustamist pean tänama netikasutajat "Xiaolongi" ja emqtt.io grupi netikasutajaid abi eest, olen just hakanud MQTT kasutama. On palju asju, millest ma aru ei saa, kui küsisin emqtt.io grupis lahenduse kohta, andis "Xiaolong" mulle põhjaliku selgituse mõningatest MQTT teadmistepunktidest ja pakkus lahendusi, suur tänu. Arvan, et mõned selles mainitud asjad on algajatele endiselt väga kasulikud, seega siin on kokkuvõte minu vestlusajaloost "Xiaolongiga" sinu viiteks.
Küsimus 1: Kui MCU-l on piiratud vahemälu ja piiratud arvutusvõimsus, on võimatu sõnumeid korraga saata, kuidas sel juhul MQTT kaudu sõnumeid avaldada? Kõigepealt koosta avaldamisprotokolli päis, kirjuta sinna koormuse pikkus, saada see TCP kaudu välja ja seejärel saada koormus vähehaaval. Kui sa ei saa kogu koormuse pikkust teada, on see keeruline. Kuna sa saadad avaldamisprotokolli raporti, siis pärast seda, kui server loeb koormuse pikkuse peas, jätkab see lugemist kuni vajaliku pikkuseni ja siis loendatakse avaldamine. Seetõttu on esmalt kinnitada avaldatava sisu pikkus, seejärel grupeerida avaldamispaketi päis, täita koormuse pikkus tcp:send(head) ja seejärel saata koormus ükshaaval, näiteks 1k kaupa, või saata andmed vastavalt tavapärasele tcp-le ja saata see lõpuni, isegi kui avaldamine on lõppenud. Järgmine send kuulub TCP kihile ja sa ei pea sekkuma. Kui TCP kihis send ebaõnnestub, peab olema probleem socketiga, ühendus katkeb, pead uuesti ühenduma MQTT serveriga, kui see pole lõpetatud, siis serveri sessioon lõpeb samuti, st server pole andmeid kätte saanud. Uuesti ühendada, pead sõnumi uuesti saatma, seni kuni see on katkestatud, pead uuesti ühendama, kas tahad andmeid uuesti saata, sõltub sellest, kas oled eelnevad andmed salvestanud. Kui sõnum on oluline, võid kasutada qos=1 või 2, et server sõnumi kätte saaks, qos=1 nõuab ühte ringreisi, qos=2 nelja ringreisi, qos=0 on väga lihtne, kui sa selle välja saadad, pole vahet.
Küsimus 2: Kas MQTT jaoks on palju avatud lähtekoodiga ressursse?
Hüperlingi sisselogimine on nähtav.Neid on palju
Küsimus 3: Miks MQTT üldiselt ei paku püsivusfunktsioone?
MQTT protokoll on loodud vastavalt seadme veebipõhisele disainile ning andmed salvestatakse mällu
Küsimus 4: Kas MQTT tarbib mälu?
MQTT kulutab rohkem mälu ning emqtt mõõdetud andmed on: 38W, mälu moodustab 14G, CPU 15%
Küsimus 5: Milline on sessiooni ja kliendi suhe?
Näiteks, kui sul on plaat, mis kliendina algatab MQTT ühenduse päringu, et ühendada MQTT serveriga, näiteks on see EMQTT teenus, siis pärast seda, kui EMQTT server saab selle plaadi ühendustaotluse, loob ta TCP ühenduse plaadiga TCP kihil ning EMQTT sees genereeritakse protsess selle plaadiga suhtlemiseks ning genereeritakse samuti protsess, mida nimetatakse sessiooniks. See sessoin on teema, mis on spetsialiseerunud selle foorumi tellimuse haldamisele, ning teised foorumid saadavad selle vastavale sessioonile, kui nad avaldavad foorumile huvipakkuva teema, kui see sessioon saab tellitud teema ja leiab, et klient on endiselt elus, saadab ta andmed selle kliendi kaudu TCP kaudu sellele foorumile, kui selgub, et klient enam ei eksisteeri, st plaat ja server on katki. Seejärel salvestab sessioon esmalt vastuvõetud tellimuse teema sessioonis ja järgmine kord, kui plaat on ühendatud, ja cleansession=false, siis sessiooni ei puhastata ning seekord ühendades saadetakse tahvlile eelnevalt saadud tellimuse sõnum, mis tõenäoliselt tähendab seda.
Küsimus 6: Kuidas emqtt teab, et ühendatud klient on sama?
Ühendamisel tuleb seadistada kliendi ID, see ID võib jääda määramata, kui pole seadistatud, genereeritakse automaatselt unikaalne ID emqtt serveri poolel, kui soovid sessiooni kasutada, peab sul olema unikaalne ID, võid kasutada IMEI-d. Kui pead saama võrguühenduseta sõnumeid, pead kasutama kindlat ID-d.
Küsimus 7: Kas emqtt sessiooniaega saab muuta?
Sa võid sessiooni aega muuta, nüüd on see 48 tundi, võid muuta nädalaks, kui tahad, et see oleks püsiv, siis kahjuks EMQTT ei sobi.
Küsimus 8: Kas emqtt ligipääsuõigus on konfiguratsioonifailis kirjas?
etc/acl.config
Küsimus 9: Milline on emqtt jaotus?
Hajutatud tähendab lihtsalt mitme serveri ühendamist, ükskõik millise või mitme neist, kuni kõik pole katki, saab emqtt töötada normaalselt. EMQTT andmeid jagatakse mitme sõlme vahel ning kui sõlmega tekib probleem, siis andmed ei kao, kuid sõlme sessiooniandmed kaovad.
|