Než začnu psát text, musím poděkovat uživateli internetu "Xiaolong" a uživatelům ve skupině emqtt.io za jejich pomoc, právě jsem začal používat MQTT. Je mnoho věcí, kterým nerozumím, když jsem se ptal na řešení ve skupině emqtt.io, "Xiaolong" mi podrobně vysvětlil některé znalosti MQTT a poskytl řešení, moc děkuji. Myslím, že některé věci zmíněné v něm jsou stále velmi užitečné pro začátečníky, takže zde je shrnutí mé historie chatu s "Xiaolong" pro vaši informaci.
Otázka 1: Pokud má MCU omezenou cache a omezený výpočetní výkon, není možné posílat zprávy najednou, jak v tomto případě publikovat zprávy přes MQTT? Nejprve sestavte hlavičku protokolu publikování, napište délku užitečného zatížení, odesílejte ho přes TCP a pak pošlete užitečný obsah postupně. Pokud nemůžete získat celkovou délku nákladu, je to obtížné. Protože odesíláte zprávu o publikování protokolu, po přečtení délky payloadu server v hlavě bude pokračovat ve čtení, dokud nedosáhne požadované délky, a pak je publikace započítána. Proto je potřeba nejprve potvrdit délku publikovaného obsahu, pak seskupit hlavičku paketu pro publikování, vyplnit délku payloadu, tcp:send(head), a pak poslat payload postupně, například po 1k, nebo odesílat data podle běžného tcp a poslat je až do konce, i když je publikace u konce. Další send patří TCP vrstvě a není třeba zasahovat. Pokud v TCP vrstvě selže odesílání, musí být problém se socketem, spojení je přerušeno, musíte se znovu připojit k MQTT serveru, pokud není dokončen, pak serverová relace také skončí, tedy server data neobdržel. Znovu se připojit, musíte zprávu znovu odeslat, pokud je odpojená, musíte se znovu připojit, zda chcete data znovu odeslat, záleží na tom, jestli jste uložili předchozí data. Pokud je zpráva důležitá, můžete použít qos=1 nebo 2, abyste zajistili, že server zprávu přijme, qos=1 vyžaduje jednu cestu tam a zpět, qos=2 čtyři okolosměrné cesty, qos=0 je velmi jednoduché, pokud ji odešlete, nevadí to.
Otázka 2: Existuje mnoho open source zdrojů pro MQTT?
Přihlášení k hypertextovému odkazu je viditelné.Je jich hodně
Otázka 3: Proč MQTT obecně neposkytuje perzistenční funkce?
Protokol MQTT je navržen podle online návrhu zařízení a data jsou uložena v paměti
Otázka 4: Zabírá MQTT paměť?
MQTT spotřebovává více paměti a naměřená data emqtt jsou: 38W, paměť tvoří 14G, CPU 15 %
Otázka 5: Jaký je vztah mezi sezením a klientem?
Například pokud máte desku, jako klient iniciuje požadavek na připojení MQTT k připojení k MQTT serveru, jedná se o službu EMQTT, poté co EMQTT server obdrží požadavek na připojení této desky, naváže TCP spojení s deskou na TCP vrstvě a uvnitř EMQTT bude generován proces pro komunikaci s touto deskou, a také bude generován proces nazvaný session. Toto téma je specializující se na správu předplatného této desky, a ostatní fóra jej také zašlou na odpovídající sekci této desky, pokud zveřejní téma, které je pro tuto radu zajímavé, pokud tato relace přijme předplacené téma a zjistí, že klient je stále naživu, odešle data přes tohoto klienta přes TCP na tuto desku, pokud se zjistí, že klient již není přítomen k dispozici, tedy že deska i server jsou rozbité. Poté se nejprve uloží téma přijatého odběru do relace a příště, když je deska připojena, a cleansession=false, relace nebude vymazána, a při připojení tentokrát bude představenstvu odeslána dříve přijatá zpráva o předplatném, což pravděpodobně znamená.
Otázka 6: Jak emqtt pozná, že připojený klient je stejný?
Při připojení je potřeba nastavit ID klienta, toto ID může zůstat nenastavené, pokud ne, unikátní ID se automaticky vygeneruje na straně emqtt serveru, pokud chcete použít relaci, musíte mít unikátní ID, můžete použít IMEI. Pokud musíte přijímat offline zprávy, musíte použít konkrétní ID.
Otázka 7: Lze čas relace emqtt upravit?
Můžete změnit délku sezení, teď je to 48 hodin, můžete ji změnit na týden, pokud chcete, aby to bylo trvalé, bohužel to není vhodné.
Otázka 8: Je přístupové oprávnění emqtt zapsáno v konfiguračním souboru?
etc/acl.config
Otázka 9: Jaké je rozložení emqtt?
Distribuované jednoduše znamená propojení několika serverů dohromady, jednoho nebo více, pokud nejsou všechny rozbité, emqtt může běžet normálně. EMQTT data jsou sdílena několika uzly, a pokud je problém s jedním uzelem, data se neztratí, ale data relace na daném uzlu budou ztracena.
|