Prieš pradėdamas tekstą, turiu padėkoti internautui "Xiaolong" ir emqtt.io grupės internautams už pagalbą, ką tik pradėjau naudotis MQTT Yra daug dalykų, kurių nesuprantu, kai paklausiau apie sprendimą emqtt.io grupėje, "Xiaolong" išsamiai paaiškino kai kuriuos MQTT žinių taškus ir pateikė sprendimus, labai ačiū. Manau, kad kai kurie jame paminėti dalykai vis dar yra labai naudingi pradedantiesiems, todėl čia yra mano pokalbių istorijos su "Xiaolong" santrauka.
1 klausimas: Jei MCU turi ribotą talpyklą ir ribotą apdorojimo galią, neįmanoma išsiųsti pranešimų iš karto, kaip tokiu atveju paskelbti pranešimus per MQTT? Pirmiausia surinkite publikavimo protokolo antraštę, parašykite joje naudingosios apkrovos ilgį, išsiųskite ją per TCP ir po truputį išsiųskite naudingąją apkrovą. Jei negalite gauti bendro naudingosios apkrovos ilgio, tai sunku. Kadangi siunčiate publikavimo protokolo ataskaitą, serveriui nuskaitius naudingosios apkrovos ilgį galvutėje, jis bus skaitomas tol, kol pasieks reikiamą ilgį, o tada publikacija bus skaičiuojama. Todėl pirmiausia turite patvirtinti skelbiamo turinio ilgį, tada sugrupuoti publikavimo paketo antraštę, užpildyti naudingosios apkrovos ilgį tcp:send(head) ir išsiųsti naudingąją apkrovą po vieną, pvz., 1k vienu metu, arba siųsti duomenis pagal įprastą tcp ir išsiųsti juos iki galo, net jei publikavimas baigėsi. Kitas siuntimas priklauso TCP sluoksniui ir jums nereikia įsikišti. Jei TCP sluoksnyje siuntimas nepavyksta, turi kilti problemų dėl lizdo, ryšys nutrūkęs, turite iš naujo prisijungti prie MQTT serverio, jei jis nebus baigtas, tada serverio sesija taip pat baigsis, tai yra, serveris negavo duomenų. Prisijunkite iš naujo, turite iš naujo išsiųsti pranešimą, kol jis atjungtas, turite prisijungti iš naujo, ar norite iš naujo siųsti duomenis, priklauso nuo to, ar išsaugojote ankstesnius duomenis. Be to, jei pranešimas yra svarbus, galite naudoti qos=1 arba 2, kad užtikrintumėte, jog serveris gauna pranešimą, qos=1 reikalauja vienos kelionės pirmyn ir atgal, qos=2 reikia keturių kelionių pirmyn ir atgal, qos=0 yra labai paprasta, kol jį išsiunčiate, nesvarbu.
2 klausimas: Ar yra daug atvirojo kodo išteklių MQTT?
Hipersaito prisijungimas matomas.Jų yra daug
3 klausimas: Kodėl MQTT paprastai neteikia patvarumo funkcijų?
MQTT protokolas sukurtas pagal įrenginio internetinį dizainą, o duomenys saugomi atmintyje
4 klausimas: Ar MQTT sunaudoja atmintį?
MQTT sunaudoja daugiau atminties, o išmatuoti emqtt duomenys yra: 38 W, atmintis sudaro 14G, procesorius 15%
5 klausimas: Koks yra sesijos ir kliento santykis?
Pavyzdžiui, jei turite plokštę, kaip klientas, inicijuojate MQTT ryšio užklausą, kad prisijungtumėte prie MQTT serverio, pavyzdžiui, tai yra EMQTT paslauga, EMQTT serveriui gavus šios plokštės prisijungimo užklausą, jis užmegzs TCP ryšį su TCP sluoksnio plokšte, o EMQTT viduje bus sugeneruotas procesas, skirtas bendrauti su šia plokšte, taip pat bus sugeneruotas procesas, vadinamas sesija. Ši sesija yra tema, kuri specializuojasi šios lentos prenumeratos valdyme, o kitos lentos taip pat atsiųs ją į sesiją, atitinkančią šią lentą, jei paskelbs dominančią temą šiai lentai, jei ši sesija gaus prenumeruojamą temą ir nustatys, kad klientas vis dar gyvas, ji išsiųs duomenis per šį klientą per TCP į šią lentą, jei bus nustatyta, kad kliento nebėra, tai yra, lenta ir serveris yra sugedę. Tada sesija pirmiausia išsaugos gautą prenumeratos temą sesijoje, o kitą kartą prijungus lentą ir cleansession=false, seansas nebus išvalytas, o prisijungus šį kartą, anksčiau gautas prenumeratos pranešimas bus išsiųstas į lentą, o tai tikriausiai reiškia.
6 klausimas: Kaip emqtt žino, kad prijungtas klientas yra tas pats?
Jungiantis reikia nustatyti kliento ID, šį ID galima palikti nenustatytą, jei nenustatytas, emqtt serverio pusėje bus automatiškai sugeneruotas unikalus ID, jei norite naudoti sesiją, turite turėti unikalų ID, galite naudoti IMEI. Jei turite gauti pranešimus neprisijungus, turite naudoti konkretų ID.
7 klausimas: Ar galima keisti emqtt seanso laiką?
Galite pakeisti sesijos laiką, dabar jis yra 48 valandos, galite jį pakeisti į savaitę, jei norite, kad jis būtų nuolatinis, bijau, kad emqtt netinka.
8 klausimas: Ar emqtt prieigos leidimas parašytas konfigūracijos faile?
etc/acl.config
9 klausimas: Koks yra emqtt pasiskirstymas?
Paskirstytas tiesiog reiškia kelių serverių sujungimą, bet kurį iš jų, jei jie nėra visi sugedę, emqtt gali veikti normaliai. EMQTT duomenis bendrina keli mazgai, o jei kyla problemų dėl mazgo, duomenys nebus prarasti, bet sesijos duomenys mazge bus prarasti.
|