Før jeg begynner på teksten, må jeg takke nettbrukeren "Xiaolong" og nettbrukerne i emqtt.io-gruppen for hjelpen, jeg har nettopp begynt å bruke MQTT. Det er mange ting jeg ikke forstår, da jeg spurte om løsningen i emqtt.io-gruppen, ga "Xiaolong" meg en detaljert forklaring på noen MQTT-kunnskapspunkter og ga løsninger, tusen takk. Jeg synes noen av tingene som nevnes fortsatt er veldig nyttige for nybegynnere, så her er en oppsummering av chattehistorikken min med "Xiaolong" til din referanse.
Spørsmål 1: Hvis MCU-en har begrenset cache og begrenset prosesseringskraft, er det umulig å sende meldinger samtidig, hvordan publiserer man meldinger gjennom MQTT i dette tilfellet? Først samler du headeren til publiseringsprotokollen, skriver lengden på nyttelasten i den, sender den ut via TCP, og sender deretter nyttelasten litt etter litt. Hvis du ikke får tak i total nyttelastlengde, er dette vanskelig. Fordi du sender en publish protocol-rapport, vil serveren etter å ha lest lengden på nyttelasten i hodet, fortsette å lese til den har nådd nødvendig lengde, og da telles publiseringen. Derfor er behovet først å bekrefte lengden på innholdet du publiserer, deretter gruppere publiseringspakkeheaderen, fylle inn nyttelastlengden, tcp:send(head), og deretter sende nyttelasten én etter én, for eksempel 1k om gangen, eller sende dataene i henhold til vanlig TCP, og sende den hele veien, selv om publiseringen er over. Neste sending tilhører TCP-laget, og du trenger ikke å gripe inn. Hvis send feiler i TCP-laget, må det være et problem med socketen, forbindelsen er brutt, du må koble til MQTT-serveren igjen, hvis den ikke er ferdig, vil serverøkten også avsluttes, det vil si at serveren ikke har mottatt dataene. Koble til igjen, du må sende meldingen på nytt, så lenge den er koblet fra, må du koble til igjen, om du vil sende dataene på nytt, avhenger av om du har lagret de forrige dataene. Hvis meldingen er viktig, kan du bruke qos=1 eller 2 for å sikre at serveren mottar meldingen, qos=1 krever én rundtur, qos=2 trenger fire rundturer, qos=0 er veldig enkelt, så lenge du sender det ut, spiller det ingen rolle.
Spørsmål 2: Finnes det mange åpne kildekode-ressurser for MQTT?
Innloggingen med hyperkoblingen er synlig.Det er mange av dem
Spørsmål 3: Hvorfor tilbyr MQTT generelt ikke persistensfunksjoner?
MQTT-protokollen er designet i henhold til enhetens online design, og dataene lagres i minnet
Spørsmål 4: Er MQTT minnekrevende?
MQTT bruker mer minne, og de målte dataene for emqtt er: 38W, minne dekker 14G, CPU 15 %
Spørsmål 5: Hva er forholdet mellom timen og klienten?
For eksempel, hvis du har et kort, som klient, initierer en MQTT-tilkoblingsforespørsel for å koble til MQTT-serveren, for eksempel er det en EMQTT-tjeneste, etter at EMQTT-serveren mottar tilkoblingsforespørselen til dette kortet, vil den etablere en TCP-forbindelse med kortet på TCP-laget, og innenfor EMQTT vil en prosess bli generert for å kommunisere med dette kortet, og en prosess vil også bli generert, kalt session. Denne sessionoin er et tema som spesialiserer seg på å administrere abonnementet til dette brettet, og andre styr vil også sende det til sesjonen som tilsvarer dette brettet hvis de publiserer temaet av interesse for dette forumet, hvis denne sesjonen mottar det abonnerte temaet og finner at klienten fortsatt er levende, vil den sende dataene gjennom denne klienten via TCP til dette brettet, hvis det oppdages at klienten ikke lenger er der, det vil si at kortet og serveren er ødelagt. Deretter lagrer sesjonen det mottatte abonnementstemaet i sesjonen først, og neste gang tavlen kobles til, og cleansession=false, vil ikke sesjonen bli slettet, og når denne gangen kobles til, sendes den tidligere mottatte abonnementsmeldingen til tavlen, som sannsynligvis er det det betyr.
Spørsmål 6: Hvordan vet emqtt at den tilkoblede klienten er den samme?
Når du kobler til, må du sette en klient-ID, denne ID-en kan stå uaktivert, hvis ikke satt, vil en unik ID automatisk bli generert på emqtt-serversiden, hvis du vil bruke session, må du ha en unik ID, du kan bruke IMEI. Hvis du må motta offline-meldinger, må du bruke en bestemt ID.
Spørsmål 7: Kan sesjonstiden for emqtt endres?
Du kan endre timetiden, nå er den 48 timer, du kan endre den til en uke, hvis du vil at den skal være permanent, er jeg redd emqtt ikke er passende.
Spørsmål 8: Er tilgangstillatelsen til emqtt skrevet i konfigurasjonsfilen?
osv/acl.config
Spørsmål 9: Hva er fordelingen av emqtt?
Distribuert betyr enkelt og greit å koble flere av serverne dine sammen, en eller flere av dem, så lenge de ikke alle er ødelagte, kan emqtt kjøre normalt. EMQTT-data deles av flere noder, og hvis det oppstår problemer med en node, vil ikke dataene gå tapt, men sesjonsdataene på noden vil gå tapt.
|