Põhimõtteliselt vähendab MQTT latentsust seal, kus on suhteliselt kõrge viivitus, näiteks WiFi, hoides TCP-ühendust elus, et andmeid saaks väga kiiresti avaldada ja vastu võtta. See kasutab porti 1883, mitte 80. Nagu ma aru saan, ühendavad väljaandjad ja tellijad üks kord maakleriga ja pingutavad seejärel maaklerit regulaarselt, et ühendus püsiks elus; maakleri pingutamise sagedus sõltub eelnevalt kokku lepitud hoidmisperioodist. Ka MQTT paketid on HTTP-päringutest oluliselt väiksemad. Kui ühendus on kuidagi katki, proovib klient korduvalt ühendust taastada ja kui see õnnestub, tellivad tellijad uuesti.
Tellijad määratlevad tagasihelistamised, millele helistatakse pärast seda, kui mõni kirjastaja on teemat värskendanud. . MQTT sobib kõige paremini ajakriitiliste tööde jaoks, kus HTTP-taotlused võtaksid lihtsalt liiga kaua aega ja kus soovitakse muutunud teemadest kiiret teavitamist. Ma pole kindel, kuid tõenäoliselt tarbib see rohkem akut, sest siin on küsimus pidevas TCP-lingis maakleriga.
Kuna ootate andmete värskendusi ainult iga minut, on minu arvates mõttekam ühendada ja hankida vooandmed serverist iga 60 sekundi järel. Saate kasutada voo Viimati uuendatud
ajatemplit (kui seda pole, siis looge see), et kontrollida, kas Arduino on voogu veel värskendanud. MQTT tehnika veedaks suurema osa ajast lihtsalt ilma vahendita maakleriga ühenduses, kuna teate juba, et värskendussündmused toimuvad iga minut; see on märkimisväärne hulk aega ja energiat, mis kulub prognoositavate andmete ootamisele.
Siiski võiksite oodata umbes 55 sekundit, teemat tellida ja uute andmete saamisel katkestate ühenduse ja ootate siis uuesti 55 sekundit, kuigi ma ei tea, kas sellest saab palju paranemine RESTiga võrreldes. Kui kasutate seda meetodit, saate ka elamisperioodiks seada vaid umbes 10 sekundit, nii et Arduinol oleks piisavalt aega voo värskendamiseks enne, kui teie rakendusest teavitatakse, ja pole vaja tavalisi pinge.
Kui otsustate MQTT-ga minna, vaadake seda Arduino teeki.