Înainte de a începe textul, trebuie să-i mulțumesc internauților "Xiaolong" și utilizatorilor din grupul emqtt.io pentru ajutor, abia am început să folosesc MQTT. Sunt multe lucruri pe care nu le înțeleg, când am întrebat despre soluție în grupul emqtt.io, "Xiaolong" mi-a oferit o explicație detaliată a unor puncte de cunoaștere MQTT și a oferit soluții, mulțumesc mult. Cred că unele dintre lucrurile menționate în el sunt încă foarte utile pentru începători, așa că iată un rezumat al istoricului meu de chat cu "Xiaolong" pentru referința ta.
Întrebarea 1: Dacă MCU-ul are cache și putere de procesare limitate, este imposibil să trimiți mesaje simultan, cum se publică mesajele prin MQTT în acest caz? Mai întâi, asamblează antetul protocolului de publicare, scrie lungimea încărcăturii utile în el, o trimite prin TCP și apoi trimite sarcina utilă puțin câte puțin. Dacă nu poți obține lungimea totală a încărcăturii utile, acest lucru este dificil. Pentru că trimiți un raport de protocol de publicare, după ce serverul citește lungimea încărcăturii utile din cap, acesta va continua să citească până ajunge la lungimea necesară, iar atunci publicarea este numărată. Prin urmare, nevoia ta este mai întâi să confirmi lungimea conținutului pe care îl publici, apoi să grupezi antetul pachetului de publicare, să completezi lungimea sarcinii utile, tcp:send(head), și apoi să trimiți încărcătura utilă unul câte unul, de exemplu 1k pe rând, sau să trimiți datele conform TCP-ului normal și să le trimiți complet, chiar dacă publicarea s-a încheiat. Următoarea trimitere aparține stratului TCP și nu trebuie să intervii. Dacă în stratul TCP, trimiterea eșuează, trebuie să existe o problemă cu socket-ul, conexiunea este întreruptă, trebuie să te reconectezi la serverul MQTT, iar dacă nu se termină, atunci și sesiunea serverului se va încheia, adică serverul nu a primit datele. Reconectează-te, trebuie să retrimiți mesajul, atâta timp cât este deconectat, trebuie să te reconectezi, dacă vrei sau nu să retrimiți datele, depinde dacă ai salvat datele anterioare. De asemenea, dacă mesajul este important, poți folosi qos=1 sau 2 pentru a te asigura că serverul primește mesajul, qos=1 necesită o călătorie dus-întors, qos=2 necesită patru drumuri dus-întors, qos=0 este foarte simplu, atâta timp cât îl trimiți, nu contează.
Întrebarea 2: Există multe resurse open source pentru MQTT?
Autentificarea cu hyperlink este vizibilă.Sunt mulți dintre ei
Întrebarea 3: De ce MQTT, în general, nu oferă funcții de persistență?
Protocolul MQTT este proiectat conform designului online al dispozitivului, iar datele sunt stocate în memorie
Întrebarea 4: Consumă MQTT memoria?
MQTT consumă mai mult memorie, iar datele măsurate ale emqtt sunt: 38W, memoria reprezintă 14G, CPU 15%
Întrebarea 5: Care este relația dintre ședință și client?
De exemplu, dacă ai o placă, ca client, care inițiază o cerere de conexiune MQTT pentru a se conecta la serverul MQTT, de exemplu este un serviciu EMQTT; după ce serverul EMQTT primește cererea de conexiune a acestei plăci, va stabili o conexiune TCP cu placa de pe stratul TCP, iar în EMQTT va fi generat un proces pentru a comunica cu această placă, iar un proces va fi de asemenea generat, numit session. Această sesiune este o temă specializată în gestionarea abonamentului acestui forum, iar alte consilii îl vor trimite de asemenea către sesiunea corespunzătoare acestui forum dacă publică subiectul de interes pentru acest forum; dacă această sesiune primește subiectul abonat și constată că clientul este încă în viață, va trimite datele prin acest client prin TCP către acest forum, iar dacă se constată că clientul nu mai este acolo, adică placa și serverul sunt defecte. Apoi sesiunea va salva mai întâi subiectul de abonament primit în sesiune, iar data viitoare când panoul este conectat, iar cleansession=false, sesiunea nu va fi eliminată, iar când se conectează de data asta, mesajul de abonament primit anterior va fi trimis către consiliu, ceea ce probabil înseamnă.
Întrebarea 6: Cum știe emqtt că clientul conectat este același?
Când te conectezi, trebuie să setezi un ID client, acest ID poate rămâne nesetat, dacă nu este setat, un ID unic va fi generat automat pe partea serverului emqtt, dacă vrei să folosești sesiunea, trebuie să ai un ID unic, poți folosi IMEI. Dacă trebuie să primești mesaje offline, trebuie să folosești un ID clar.
Întrebarea 7: Poate fi modificată ora sesiunii emqtt?
Poți schimba ora ședinței, acum sunt 48 de ore, poți să o schimbi la o săptămână, dacă vrei să fie permanent, mă tem că EMQTT nu este potrivit.
Întrebarea 8: Permisiunea de acces a emqtt este scrisă în fișierul de configurare?
etc/acl.config
Întrebarea 9: Care este distribuția emqtt?
Distribuit înseamnă pur și simplu conectarea mai multor servere între ele, oricare dintre ele, atâta timp cât nu sunt toate defecte, emqtt poate rula normal. Datele EMQTT sunt partajate de mai multe noduri, iar dacă apare o problemă cu un nod, datele nu se vor pierde, dar datele de sesiune de pe nod vor fi pierdute.
|