Voordat ik aan de tekst begin, moet ik de internetgebruiker "Xiaolong" en de netizens in de emqtt.io groep bedanken voor hun hulp, ik ben net begonnen met het gebruik van MQTT. Er zijn veel dingen die ik niet begrijp, toen ik vroeg naar de oplossing in de emqtt.io groep, gaf "Xiaolong" me een gedetailleerde uitleg van enkele MQTT-kennispunten en gaf oplossingen, hartelijk dank. Ik denk dat sommige dingen die erin genoemd worden nog steeds erg nuttig zijn voor beginners, dus hier is een samenvatting van mijn chatgeschiedenis met "Xiaolong" voor jouw referentie.
Vraag 1: Als de MCU beperkte cache en rekenkracht heeft, is het onmogelijk om berichten tegelijk te verzenden, hoe publiceer je berichten dan via MQTT in dit geval? Stel eerst de header van het publiceerprotocol samen, schrijf de lengte van de payload erin, stuur deze via TCP en stuur de payload dan beetje bij beetje door. Als je de totale laadruimte niet kunt krijgen, is dit moeilijk. Omdat je een publish protocol-rapport stuurt, zal de server, nadat hij de lengte van de payload in het hoofd heeft gelezen, doorlezen totdat de vereiste lengte is bereikt, waarna de publicatie wordt geteld. Daarom moet je eerst de lengte van de content die je publiceert bevestigen, dan de publiceerpakketheader groeperen, de payloadlengte invullen, tcp:send(head), en vervolgens de payload één voor één versturen, bijvoorbeeld 1k tegelijk, of de data versturen volgens de normale TCP, en het helemaal versturen, zelfs als de publicatie voorbij is. De volgende verzending behoort tot de TCP-laag, en je hoeft niet in te grijpen. Als in de TCP-laag de verzending faalt, moet er een probleem zijn met de socket, de verbinding is verbroken, je moet opnieuw verbinden met de MQTT-server, en als het niet klaar is, eindigt ook de serversessie, dat wil zeggen, de server heeft de data niet ontvangen. Opnieuw verbinden, je moet het bericht opnieuw verzenden, zolang het is losgekoppeld, moet je opnieuw verbinden, of je de data opnieuw wilt versturen, hangt af van of je de vorige data hebt opgeslagen. Ook, als het bericht belangrijk is, kun je qos=1 of 2 gebruiken om ervoor te zorgen dat de server het bericht ontvangt, qos=1 vereist één retour, qos=2 vier retouren, qos=0 is heel eenvoudig, zolang je het verstuurt, maakt het niet uit.
Vraag 2: Zijn er veel open source bronnen voor MQTT?
De hyperlink-login is zichtbaar.Er zijn er veel
Vraag 3: Waarom biedt MQTT over het algemeen geen persistentiefuncties?
Het MQTT-protocol is ontworpen volgens het online ontwerp van het apparaat, en de data wordt opgeslagen in het geheugen
Vraag 4: Verbruikt MQTT geheugen?
MQTT verbruikt meer geheugen, en de gemeten gegevens van emqtt zijn: 38W, geheugen is 14G, CPU 15%
Vraag 5: Wat is de relatie tussen sessie en cliënt?
Als je bijvoorbeeld een bord hebt, start je als client een MQTT-verbindingsverzoek om verbinding te maken met de MQTT-server, bijvoorbeeld een EMQTT-service; nadat de EMQTT-server het verbindingsverzoek van dit bord heeft ontvangen, zal hij een TCP-verbinding tot stand brengen met het bord op de TCP-laag, en binnen EMQTT wordt een proces gegenereerd om met dit bord te communiceren, en wordt er ook een proces gegenereerd, genaamd session. Deze sessoin is een thema dat gespecialiseerd is in het beheren van het abonnement van dit bord, en andere boards sturen het ook naar de sessie die bij dit bord hoort als ze het onderwerp van interesse publiceren, als deze sessie het geabonneerde onderwerp ontvangt en ontdekt dat de client nog leeft, zal het de data via deze client via TCP naar dit bord sturen, als blijkt dat de client er niet meer is, dat wil zeggen, het bord en de server zijn kapot. Daarna slaat de sessie eerst het ontvangen abonnementsonderwerp op in de sessie, en de volgende keer dat het bord wordt verbonden, en cleansession=false, wordt de sessie niet gewist, en bij het verbinden wordt het eerder ontvangen abonnementsbericht naar het bord gestuurd, wat waarschijnlijk is wat het betekent.
Vraag 6: Hoe weet emqtt dat de verbonden client hetzelfde is?
Bij het verbinden moet je een client-ID instellen, deze ID kan niet worden ingesteld, als je niet staat, wordt er automatisch een unieke ID gegenereerd aan de emqtt-serverzijde, als je session wilt gebruiken, moet je een unieke ID hebben, je kunt IMEI gebruiken. Als je offline berichten moet ontvangen, moet je een definitief ID gebruiken.
Vraag 7: Kan de sessietijd van emqtt worden aangepast?
Je kunt de sessietijd veranderen, nu is het 48 uur, je kunt het veranderen naar een week, als je het permanent wilt maken, ben ik bang dat emqtt niet geschikt is.
Vraag 8: Staat de toegangsrechten van emqtt in het configuratiebestand?
etc/acl.config
Vraag 9: Wat is de verdeling van emqtt?
Gedistribueerd betekent simpelweg dat je meerdere van je servers met elkaar verbindt, één of meer, zolang ze niet allemaal kapot zijn, kan emqtt normaal draaien. EMQTT-gegevens worden gedeeld door meerdere nodes, en als er een probleem is met een node, gaat de data niet verloren, maar de sessiedata op de node gaat wel verloren.
|