Pirms teksta sākšanas man jāpateicas interneta lietotājam "Xiaolong" un emqtt.io grupas interneta lietotājiem par palīdzību, es tikko sāku izmantot MQTT Ir daudzas lietas, ko es nesaprotu, kad es jautāju par risinājumu emqtt.io grupā, "Xiaolong" man sniedza detalizētu skaidrojumu par dažiem MQTT zināšanu punktiem un sniedza risinājumus, liels paldies. Es domāju, ka dažas no tajā minētajām lietām joprojām ir ļoti noderīgas iesācējiem, tāpēc šeit ir manas tērzēšanas vēstures kopsavilkums ar "Xiaolong" jūsu atsaucei.
1. jautājums: Ja MCU ir ierobežota kešatmiņa un ierobežota apstrādes jauda, nav iespējams nosūtīt ziņojumus uzreiz, kā šajā gadījumā publicēt ziņojumus, izmantojot MQTT? Vispirms samontējiet publicēšanas protokola galveni, ierakstiet tajā kravas garumu, nosūtiet to caur TCP un pēc tam mazliet nosūtiet lietderīgo slodzi. Ja jūs nevarat iegūt kopējo kravas garumu, tas ir grūti. Tā kā nosūtāt publicēšanas protokola atskaiti, pēc tam, kad serveris ir nolasījis lietderīgās slodzes garumu galvā, tas turpinās lasīt, līdz tas sasniedz nepieciešamo garumu, un pēc tam publikācija tiek skaitīta. Tāpēc vispirms ir jāapstiprina publicētā satura garums, pēc tam jāgrupē publicēšanas paketes galvene, jāaizpilda lietderīgās slodzes garums, tcp:send(head) un pēc tam jānosūta lietderīgā slodze pa vienam, piemēram, 1k vienlaikus, vai jānosūta dati saskaņā ar parasto tcp un jānosūta līdz galam, pat ja publicēšana ir beigusies. Nākamā nosūtīšana pieder TCP slānim, un jums nav jāiejaucas. Ja TCP slānī sūtīšana neizdodas, ir jābūt problēmai ar ligzdu, savienojums ir bojāts, jums ir jāatjauno savienojums ar MQTT serveri, ja tas nav pabeigts, tad arī servera sesija beigsies, tas ir, serveris nav saņēmis datus. Atkārtoti izveidojiet savienojumu, jums ir jānosūta ziņojums atkārtoti, kamēr tas ir atvienots, jums ir jāatjauno savienojums, vai vēlaties atkārtoti nosūtīt datus, atkarībā no tā, vai esat saglabājis iepriekšējos datus. Turklāt, ja ziņojums ir svarīgs, varat izmantot qos=1 vai 2, lai nodrošinātu, ka serveris saņem ziņojumu, qos=1 prasa vienu turp un atpakaļ, qos=2 vajag četrus turp un atpakaļ, qos=0 ir ļoti vienkārši, kamēr jūs to nosūtāt, tam nav nozīmes.
2. jautājums: Vai MQTT ir daudz atvērtā koda resursu?
Hipersaites pieteikšanās ir redzama.To ir daudz
3. jautājums: Kāpēc MQTT parasti nenodrošina noturības funkcijas?
MQTT protokols ir izstrādāts atbilstoši ierīces tiešsaistes dizainam, un dati tiek glabāti atmiņā
4. jautājums: Vai MQTT atmiņa patērē?
MQTT patērē vairāk atmiņas, un izmērītie dati emqtt ir: 38W, atmiņa veido 14G, CPU 15%
5. jautājums: Kādas ir attiecības starp sesiju un klientu?
Piemēram, ja jums ir dēlis, kā klients, uzsākiet MQTT savienojuma pieprasījumu, lai izveidotu savienojumu ar MQTT serveri, piemēram, tas ir EMQTT pakalpojums, pēc tam, kad EMQTT serveris saņems šīs plates savienojuma pieprasījumu, tas izveidos TCP savienojumu ar TCP slāņa dēli, un EMQTT ietvaros tiks ģenerēts process, lai sazinātos ar šo dēli, un tiks ģenerēts arī process, ko sauc par sesiju. Šī sesija ir tēma, kas specializējas šīs padomes abonēšanas pārvaldībā, un citas padomes to nosūtīs arī uz sesiju, kas atbilst šai padomei, ja tās publicēs interesējošo tēmu šai padomei, ja šī sesija saņem abonēto tēmu un konstatē, ka klients joprojām ir dzīvs, tas nosūtīs datus caur šo klientu, izmantojot TCP, uz šo dēli, ja tiks konstatēts, ka klienta vairs nav, tas ir, dēlis un serveris ir bojāti. Tad sesija vispirms saglabās saņemto abonēšanas tēmu sesijā, un nākamajā reizē, kad dēlis ir savienots, un cleansession=false, tad sesija netiks notīrīta, un, šoreiz izveidojot savienojumu, iepriekš saņemtais abonēšanas ziņojums tiks nosūtīts uz dēli, kas, iespējams, ir tas, ko tas nozīmē.
6. jautājums: Kā emqtt zina, ka pievienotais klients ir vienāds?
Izveidojot savienojumu, jums ir jāiestata klienta ID, šo ID var atstāt neiestatītu, ja tas nav iestatīts, emqtt servera pusē automātiski tiks ģenerēts unikāls ID, ja vēlaties izmantot sesiju, jums ir jābūt unikālam ID, varat izmantot IMEI. Ja jums ir jāsaņem bezsaistes ziņojumi, jums jāizmanto noteikts ID.
7. jautājums: Vai emqtt sesijas laiku var mainīt?
Jūs varat mainīt sesijas laiku, tagad tas ir 48 stundas, jūs varat to mainīt uz nedēļu, ja vēlaties, lai tas būtu pastāvīgs, es baidos, ka emqtt nav piemērots.
8. jautājums: Vai emqtt piekļuves atļauja ir ierakstīta konfigurācijas failā?
utt/acl.config
9. jautājums: Kāds ir emqtt sadalījums?
Izplatīts vienkārši nozīmē vairāku jūsu serveru savienošanu kopā, jebkuru vienu vai vairākus no tiem, ja vien tie visi nav bojāti, emqtt var darboties normāli. EMQTT datus koplieto vairāki mezgli, un, ja rodas problēma ar mezglu, dati netiks zaudēti, bet sesijas dati mezglā tiks zaudēti.
|