Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 8488|Svar: 0

Flera kunskapspunkter om EMQTT

[Kopiera länk]
Publicerad på 2019-02-15 10:25:09 | | |
Innan jag börjar texten behöver jag tacka nätanvändaren "Xiaolong" och nätanvändarna i emqtt.io gruppen för deras hjälp, jag har precis börjat använda MQTT. Det finns många saker jag inte förstår, när jag frågade om lösningen i emqtt.io-gruppen gav "Xiaolong" mig en detaljerad förklaring av några MQTT-kunskapspunkter och gav lösningar, tack så mycket. Jag tycker att några av sakerna som nämns i den fortfarande är väldigt användbara för nybörjare, så här är en sammanfattning av min chatthistorik med "Xiaolong" för din referens.

Fråga 1: Om MCU:n har begränsad cache och begränsad processorkraft är det omöjligt att skicka meddelanden samtidigt, hur publicerar man meddelanden via MQTT i detta fall?
Först sätter du ihop headern för publiceringsprotokollet, skriver in nyttolastens längd, skickar ut den via TCP och skickar sedan nyttolasten lite i taget. Om du inte kan få ut den totala nyttolastlängden är detta svårt. Eftersom du skickar en publiceringsprotokollrapport, kommer servern efter att ha läst längden på nyttolasten i huvudet, fortsätta läsa tills den når önskad längd, och sedan räknas publiceringen. Därför behöver du först bekräfta längden på innehållet du publicerar, sedan gruppera publiceringspaketets header, fylla i payload-längden, tcp:send(head), och sedan skicka payloaden en efter en, till exempel 1k åt gången, eller skicka datan enligt normal TCP och skicka hela vägen, även om publiceringen är över. Nästa sändning tillhör TCP-lagret, och du behöver inte ingripa. Om sändningen misslyckas i TCP-lagret, måste det vara ett problem med socketen, anslutningen bryts, du måste återansluta till MQTT-servern, om den inte är klar kommer serversessionen också att avslutas, det vill säga servern har inte mottagit datan. Återanslut, du måste skicka om meddelandet, så länge det är frånkopplat måste du ansluta igen, om du vill skicka om datan beror på om du har sparat den tidigare datan. Om meddelandet är viktigt kan du också använda qos=1 eller 2 för att säkerställa att servern tar emot meddelandet, qos=1 kräver en rundresa, qos=2 kräver fyra rundtur, qos=0 är väldigt enkelt, så länge du skickar ut det spelar det ingen roll.

Fråga 2: Finns det många open source-resurser för MQTT?

Inloggningen med hyperlänken är synlig.Det finns många av dem

Fråga 3: Varför tillhandahåller MQTT generellt inte persistensfunktioner?

MQTT-protokollet är utformat enligt enhetens online-design, och datan lagras i minnet

Fråga 4: Tar MQTT mycket av minne?

MQTT är mer minneskrävande, och de uppmätta uppgifterna för emqtt är: 38W, minnet står för 14G, CPU 15 %

Fråga 5: Vad är relationen mellan sessionen och klienten?

Till exempel, om du har ett kort som klient, initierar en MQTT-anslutningsförfrågan för att ansluta till MQTT-servern, till exempel är det en EMQTT-tjänst, efter att EMQTT-servern mottagit anslutningsförfrågan från detta kort, kommer den att etablera en TCP-anslutning med kortet på TCP-lagret, och inom EMQTT genereras en process för att kommunicera med detta kort, och en process genereras också, kallad session. Denna session är ett tema som specialiserar sig på att hantera prenumerationen på detta forum, och andra forum skickar det också till sessionen som motsvarar detta forum om de publicerar ämnet av intresse för detta forum, om denna session tar emot det prenumererade ämnet och upptäcker att klienten fortfarande är levande, kommer den att skicka data genom denna klient via TCP till detta forum, om det upptäcks att klienten inte längre finns där, det vill säga att kortet och servern är trasiga. Sedan sparar sessionen det mottagna prenumerationsämnet i sessionen först, och nästa gång kortet ansluts, och cleansession=false, då raderas inte sessionen, och när man ansluter denna gång skickas det tidigare mottagna prenumerationsmeddelandet till brädet, vilket troligen är vad det betyder.

Fråga 6: Hur vet emqtt att den anslutna klienten är densamma?

När du ansluter måste du ställa in ett klient-ID, detta ID kan lämnas oaktiverat, om det inte är inställt genereras automatiskt ett unikt ID på emqtt-serversidan, om du vill använda session måste du ha ett unikt ID, du kan använda IMEI. Om du måste ta emot offline-meddelanden måste du använda ett definitivt ID.

Fråga 7: Kan sessionstiden för emqtt ändras?

Du kan ändra sessionstiden, nu är den 48 timmar, du kan ändra till en vecka, om du vill att det ska vara permanent, är jag rädd att emqtt inte är lämpligt.

Fråga 8: Är åtkomstbehörigheten för emqtt skriven i konfigurationsfilen?

etc/acl.config

Fråga 9: Vad är fördelningen av emqtt?

Distribuerat betyder helt enkelt att koppla ihop flera av dina servrar, en eller flera av dem, så länge de inte alla är trasiga kan emqtt köras normalt. EMQTT-data delas av flera noder, och om det uppstår problem med en nod kommer inte datan att gå förlorad, men sessionsdata på noden kommer att gå förlorad.









Föregående:Första bekantskapen med EMQX (EMQTTD) meddelandekön
Nästa:jQuery-studieanteckningar
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com