chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MQTT協(xié)議通信過程

汽車電子技術(shù) ? 來(lái)源:物聯(lián)網(wǎng)IoT開發(fā) ? 作者:杰杰mcu ? 2023-02-28 16:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

MQTT連接服務(wù)器

客戶端到服務(wù)器的網(wǎng)絡(luò)連接建立后,客戶端發(fā)送給服務(wù)器的第一個(gè)報(bào)文必須是CONNECT報(bào)文

在一個(gè)網(wǎng)絡(luò)連接上,客戶端只能發(fā)送一次CONNECT報(bào)文,如果出現(xiàn)第二個(gè)CONNECT 報(bào)文,按照協(xié)議標(biāo)準(zhǔn),服務(wù)器會(huì)將第二個(gè)CONNECT報(bào)文當(dāng)作協(xié)議違規(guī)處理并斷開客戶端的連接。

對(duì)于正常的連接請(qǐng)求,服務(wù)器必須產(chǎn)生應(yīng)答報(bào)文,如果無(wú)法建立會(huì)話,服務(wù)器應(yīng)該在應(yīng)答報(bào)文中報(bào)告對(duì)應(yīng)的錯(cuò)誤代碼。

圖片

mqtt007

MQTT訂閱主題

客戶端向服務(wù)器發(fā)送SUBSCRIBE報(bào)文用于創(chuàng)建一個(gè)或多個(gè)訂閱。

在服務(wù)器中,會(huì)記錄這個(gè)客戶關(guān)注的一個(gè)或者多個(gè)主題,當(dāng)服務(wù)器收到這些主題的PUBLISH報(bào)文的時(shí)候,將分發(fā)應(yīng)用消息到與之匹配的客戶端中。

SUBSCRIBE報(bào)文支持通配符,也為每個(gè)訂閱指定了最大的QoS等級(jí),服務(wù)器根據(jù)這些信息分發(fā)應(yīng)用消息給客戶端。

SUBSCRIBE報(bào)文擁有固定報(bào)頭、可變報(bào)頭、有效載荷。

當(dāng)服務(wù)器收到客戶端發(fā)送的一個(gè)SUBSCRIBE報(bào)文時(shí),必須向客戶端發(fā)送一個(gè)SUBACK報(bào)文響應(yīng),同時(shí)SUBACK報(bào)文必須和等待確認(rèn)的SUBSCRIBE報(bào)文有相同的報(bào)文標(biāo)識(shí)符。

如果服務(wù)器收到一個(gè)SUBSCRIBE報(bào)文,報(bào)文的主題過濾器與一個(gè)現(xiàn)存訂閱的主題過濾器相同,那么必須使用新的訂閱徹底替換現(xiàn)存的訂閱。新訂閱的主題過濾器和之前訂閱的相同,但是它的最大QoS值可以不同。與這個(gè)主題過濾器匹配的任何現(xiàn)存的保留消息必須被重發(fā),但是發(fā)布流程不能中斷。

圖片

mqtt008

SUBSCRIBE報(bào)文的有效載荷包含了一個(gè)主題過濾器列表,它們表示客戶端想要訂閱的主題,SUBSCRIBE報(bào)文有效載荷中的主題過濾器列表必須是UTF-8字符串。

服務(wù)器應(yīng)該支持包含通配符的主題過濾器。如果服務(wù)器選擇不支持包含通配符的主題過濾器,必須拒絕任何包含通配符過濾器的訂閱請(qǐng)求。

每一個(gè)過濾器后面跟著一個(gè)字節(jié),這個(gè)字節(jié)被叫做服務(wù)質(zhì)量要求(Requested QoS)。它給出了服務(wù)器向客戶端發(fā)送應(yīng)用消息所允許的最大QoS等級(jí)。

MQTT發(fā)布消息

PUBLISH控制報(bào)文是指從客戶端向服務(wù)器或者服務(wù)器向客戶端發(fā)送一個(gè)應(yīng)用消息。其實(shí)從服務(wù)器分發(fā)的報(bào)文給訂閱者,也是屬于PUBLISH控制報(bào)文。

服務(wù)質(zhì)量等級(jí) QoS

QoS的值表示應(yīng)用消息分發(fā)的服務(wù)質(zhì)量等級(jí)保證,在不同的服務(wù)質(zhì)量等級(jí)中,PUBLISH控制報(bào)文的處理方式也是不同的,而且PUBLISH報(bào)文的接收者(可以是服務(wù)器,也可以是客戶端)必須按照根據(jù)PUBLISH報(bào)文中的QoS等級(jí)發(fā)送對(duì)應(yīng)的應(yīng)答報(bào)文。

PUBLISH報(bào)文固定報(bào)頭的bit2-bit1位表示服務(wù)質(zhì)量等級(jí):

圖片

MQTT按照這里定義的服務(wù)質(zhì)量 (QoS) 等級(jí)分發(fā)應(yīng)用消息。服務(wù)器分發(fā)應(yīng)用消息給多個(gè)客戶端(訂閱者)時(shí),每個(gè)客戶端獨(dú)立處理。從發(fā)布者發(fā)布消息到接受者,分發(fā)的消息服務(wù)質(zhì)量可能是不同的,這取決于訂閱者訂閱主題時(shí)指定的服務(wù)質(zhì)量等級(jí)。而對(duì)于發(fā)布者而言,發(fā)布消息時(shí)就指定了服務(wù)質(zhì)量等級(jí)。

QoS0的PUBLISH控制報(bào)文

消息的分發(fā)依賴于底層網(wǎng)絡(luò)的能力。服務(wù)器不會(huì)發(fā)送響應(yīng),發(fā)布者也不會(huì)重試,它在發(fā)出這個(gè)消息的時(shí)候就立馬將消息丟棄,這個(gè)消息可能送達(dá)一次也可能根本沒送達(dá)。

發(fā)布者必須發(fā)送QoS等于0,DUP等于0的PUBLISH報(bào)文。

在服務(wù)器接受PUBLISH報(bào)文時(shí)要將消息分發(fā)給訂閱該主題(消息)的訂閱者。

圖片

mqtt009

QoS1的PUBLISH控制報(bào)文

服務(wù)質(zhì)量確保消息至少送達(dá)一次,甚至可能被多次處理。QoS1的PUBLISH報(bào)文的可變報(bào)頭中包含一個(gè)報(bào)文標(biāo)識(shí)符,需要PUBACK報(bào)文確認(rèn)。

發(fā)布者在每次發(fā)送新的應(yīng)用消息都必須分配一個(gè)未使用的報(bào)文標(biāo)識(shí)符,在發(fā)布消息的同時(shí)將消息存儲(chǔ)起來(lái),等待服務(wù)器的應(yīng)答,直到從接收者那收到對(duì)應(yīng)的PUBACK報(bào)文。發(fā)送的PUBLISH報(bào)文必須包含報(bào)文標(biāo)識(shí)符且QoS等于1,DUP等于0。

一旦發(fā)布者收到來(lái)自服務(wù)器的PUBACK報(bào)文后,這個(gè)報(bào)文標(biāo)識(shí)符就可以重復(fù)使用。

接收者響應(yīng)的PUBACK報(bào)文必須包含一個(gè)報(bào)文標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符來(lái)自接收到的PUBLISH報(bào)文。在發(fā)送了PUBACK報(bào)文之后,接收者必須將任何包含相同報(bào)文標(biāo)識(shí)符的入站PUBLISH報(bào)文當(dāng)作一個(gè)新的消息,并忽略它的DUP標(biāo)志的值。

圖片

mqtt010

QoS2的PUBLISH控制報(bào)文

這是最高等級(jí)的服務(wù)質(zhì)量,必須保證有且只有處理一次消息,消息丟失和重復(fù)都是不可接受的。使用這個(gè)服務(wù)質(zhì)量等級(jí)會(huì)有額外的開銷。

QoS2的消息可變報(bào)頭中有報(bào)文標(biāo)識(shí)符。

QoS2的PUBLISH報(bào)文的接收者使用一個(gè)兩步確認(rèn)過程來(lái)確認(rèn)收到。

發(fā)送者必須給要發(fā)送的新應(yīng)用消息分配一個(gè)未使用的報(bào)文標(biāo)識(shí)符。發(fā)送的PUBLISH報(bào)文必須包含報(bào)文標(biāo)識(shí)符且報(bào)文的QoS等于2,,DUP等于0。

在消息發(fā)出去后,需要將這個(gè)消息存儲(chǔ)起來(lái),而且必須將這個(gè)PUBLISH報(bào)文看作是未確認(rèn)的,直到從接收者那收到對(duì)應(yīng)的PUBREC報(bào)文。

當(dāng)發(fā)布者收到的PUBREC報(bào)文后必須發(fā)送一個(gè)PUBREL報(bào)文。PUBREL報(bào)文必須包含與原始PUBLISH報(bào)文相同的報(bào)文標(biāo)識(shí)符。

而且發(fā)布者還必須必須將這個(gè)PUBREL報(bào)文看作是未確認(rèn)的,直到從接收者那收到對(duì)應(yīng)的PUBCOMP報(bào)文。一旦發(fā)送了對(duì)應(yīng)的PUBREL報(bào)文就不能重發(fā)這個(gè)PUBLISH報(bào)文。

所以就如下圖所示,在發(fā)布消息的時(shí)候,立馬存儲(chǔ)消息,在收到PUBREC報(bào)文后必須將存儲(chǔ)的消息丟棄掉,然后存儲(chǔ)報(bào)文標(biāo)識(shí)符,與此同時(shí)還要將PUBREL報(bào)文發(fā)送出去,最后在收到PUBCOMP報(bào)文后,才丟棄存儲(chǔ)的報(bào)文標(biāo)識(shí)符。

圖片

mqtt011

當(dāng)然啦,對(duì)應(yīng)分發(fā)消息也是比較復(fù)雜的,它一般有兩種處理方案,每一種方案都要確保消息有且只有處理一次。

接收者(此處指服務(wù)器)響應(yīng)的PUBREC報(bào)文必須包含報(bào)文標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符來(lái)自接收到的PUBLISH報(bào)文。

發(fā)送PUBREC報(bào)文后,在收到對(duì)應(yīng)的PUBREL報(bào)文之前,接收者可以將消息分發(fā)給訂閱者,但是必須要存儲(chǔ)報(bào)文標(biāo)識(shí)符(方案1)。

當(dāng)然,它在這種情況下,也可以存儲(chǔ)消息,直到收到PUBREL報(bào)文才將消息分發(fā)到訂閱者(方案2)。

而當(dāng)它收到PUBREL報(bào)文后,它必須發(fā)送PUBCOMP報(bào)文響應(yīng)發(fā)布者,該報(bào)文必須包含與PUBREL報(bào)文相同的標(biāo)識(shí)符。

與此同時(shí),它可以丟棄存儲(chǔ)的報(bào)文標(biāo)識(shí)符(方案1),而不必再分發(fā)應(yīng)用消息給訂閱者。

如果此前沒有分發(fā)應(yīng)用消息給訂閱者(方案2),那么此時(shí)需要分發(fā)應(yīng)用消息給訂閱者,然后丟棄消息。

在接收者發(fā)送PUBCOMP報(bào)文之后,接收者必須將包含相同報(bào)文標(biāo)識(shí)符的任何后續(xù)PUBLISH報(bào)文當(dāng)作一個(gè)新的發(fā)布。

取消訂閱

客戶端發(fā)送UNSUBSCRIBE報(bào)文給服務(wù)器,用于取消訂閱主題。

UNSUBSCRIBE報(bào)文固定報(bào)頭的第3,2,1,0位是保留位且必須分別設(shè)置為0,0,1,0。否則服務(wù)器必須認(rèn)為任何其它的值都是不合法的并關(guān)閉網(wǎng)絡(luò)連。具體的描述可以看協(xié)議文檔。

UNSUBSCRIBE報(bào)文的有效載荷包含客戶端想要取消訂閱的主題過濾器列表。UNSUBSCRIBE報(bào)文中的主題過濾器必須是連續(xù)打包的UTF-8編碼字符串。

UNSUBSCRIBE報(bào)文的有效載荷必須至少包含一個(gè)主題過濾器列表,而且這個(gè)主題過濾器是已經(jīng)被客戶端訂閱的,否則的話沒有訂閱也就沒有取消訂閱一說(shuō)了。如果一個(gè)UNSUBSCRIBE報(bào)文沒有有效載荷是違反協(xié)議的標(biāo)準(zhǔn)的,服務(wù)器也不會(huì)去處理它。

而對(duì)于服務(wù)器刪除了一個(gè)訂閱,那么它將不會(huì)再分發(fā)該主題的消息到這個(gè)客戶端中。而且它必須完成分發(fā)任何已經(jīng)開始往客戶端發(fā)送的QoS1和QoS2的消息,以保證消息的服務(wù)質(zhì)量。

然后服務(wù)器必須發(fā)送UNSUBACK報(bào)文來(lái)響應(yīng)客戶端的UNSUBSCRIBE請(qǐng)求。UNSUBACK報(bào)文必須包含和UNSUBSCRIBE報(bào)文相同的報(bào)文標(biāo)識(shí)符。即使沒有刪除任何主題訂閱(客戶端取消訂閱的主題未被訂閱),服務(wù)器也必須發(fā)送一個(gè)UNSUBACK響應(yīng)。

圖片

mqtt012

斷開連接

DISCONNECT報(bào)文是客戶端發(fā)給服務(wù)端的最后一個(gè)控制報(bào)文。表示客戶端正常斷開連接。

DISCONNECT報(bào)文的固定報(bào)頭保留位必須全為0。

客戶端發(fā)送DISCONNECT報(bào)文之后必須關(guān)閉網(wǎng)絡(luò)連接,不能通過那個(gè)網(wǎng)絡(luò)連接再發(fā)送任何控制報(bào)文。

服務(wù)端在收到DISCONNECT報(bào)文時(shí)必須丟棄任何與當(dāng)前連接關(guān)聯(lián)的未發(fā)布的遺囑消息。而且當(dāng)客戶端沒有關(guān)閉網(wǎng)絡(luò)連接的時(shí)候服務(wù)器應(yīng)該主動(dòng)去關(guān)閉網(wǎng)絡(luò)連接。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7813

    瀏覽量

    90908
  • 客戶端
    +關(guān)注

    關(guān)注

    1

    文章

    301

    瀏覽量

    17089
  • Connector
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    8728
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言代碼封裝MQTT協(xié)議報(bào)文,了解MQTT協(xié)議通信過程

    MQTT是一種輕量級(jí)的通信協(xié)議,適用于物聯(lián)網(wǎng)(IoT)和低帶寬網(wǎng)絡(luò)環(huán)境。它基于一種“發(fā)布/訂閱”模式,其中設(shè)備發(fā)送數(shù)據(jù)(也稱為 “發(fā)布”)到經(jīng)紀(jì)人(稱為MQTT代理),這些數(shù)據(jù)被存儲(chǔ),并在需要時(shí)被
    的頭像 發(fā)表于 05-17 09:24 ?3938次閱讀

    RK3568-MQTT通信協(xié)議案例

    RK3568-MQTT通信協(xié)議案例
    的頭像 發(fā)表于 01-19 15:31 ?2276次閱讀
    RK3568-<b class='flag-5'>MQTT</b><b class='flag-5'>通信協(xié)議</b>案例

    TLT507-MQTT通信協(xié)議案例

    TLT507-MQTT通信協(xié)議案例
    的頭像 發(fā)表于 01-26 10:06 ?1334次閱讀
    TLT507-<b class='flag-5'>MQTT</b><b class='flag-5'>通信協(xié)議</b>案例

    MQTT協(xié)議通信 - 第1節(jié)

    通信MQTT協(xié)議
    充八萬(wàn)
    發(fā)布于 :2023年09月01日 14:37:46

    MQTT協(xié)議通信 - 第4節(jié)

    通信MQTT協(xié)議
    充八萬(wàn)
    發(fā)布于 :2023年09月01日 14:40:16

    MQTT協(xié)議通信 - 第11節(jié)

    通信MQTT協(xié)議
    充八萬(wàn)
    發(fā)布于 :2023年09月01日 14:46:07

    MQTT協(xié)議通信 - 第13節(jié)

    通信MQTT協(xié)議
    充八萬(wàn)
    發(fā)布于 :2023年09月01日 14:47:48

    MQTT協(xié)議通信 - 第14節(jié)

    通信MQTT協(xié)議
    充八萬(wàn)
    發(fā)布于 :2023年09月01日 14:48:38

    請(qǐng)問MQTT協(xié)議的整個(gè)通信流程是怎樣的?

    請(qǐng)問MQTT協(xié)議的整個(gè)通信流程是怎樣的?
    發(fā)表于 10-27 06:27

    如何利用mqtt協(xié)議實(shí)現(xiàn)的通信服務(wù)?

    如何利用mqtt協(xié)議實(shí)現(xiàn)的通信服務(wù)?
    發(fā)表于 10-27 06:41

    MQTT協(xié)議學(xué)習(xí)過程記錄

    學(xué)習(xí)mqtt協(xié)議(一)介紹1--6步內(nèi)容第一步 了解全局第二步 確定范圍第三步 定義目標(biāo)第四步 尋找資源第五步 創(chuàng)建學(xué)習(xí)計(jì)劃第六步 篩選資源總結(jié)介紹采用10步學(xué)習(xí)法學(xué)習(xí)mqtt協(xié)議,根
    發(fā)表于 01-07 06:32

    MQTT協(xié)議的相關(guān)資料分享

    前言搞智能家居就不得不說(shuō)到網(wǎng)絡(luò)通信,因?yàn)槲覀冃枰ㄟ^各種終端去控制我們的智能家居設(shè)備,所以網(wǎng)絡(luò)通信這方面是必備的.而在市面上比較流行的網(wǎng)絡(luò)通訊協(xié)議就是MQTT
    發(fā)表于 01-20 07:11

    mqtt-v3.1.1版協(xié)議

    mqtt-v3.1.1版協(xié)議,英文版,時(shí)間2014.10.29,物聯(lián)網(wǎng)通信協(xié)議MQTT
    發(fā)表于 10-29 11:22 ?0次下載

    MQTT 協(xié)議:機(jī)器對(duì)機(jī)器通信的解決方案?

    MQTT 協(xié)議:機(jī)器對(duì)機(jī)器通信的解決方案?
    的頭像 發(fā)表于 01-05 09:43 ?1110次閱讀

    基于MQTT協(xié)議的車云通信設(shè)計(jì)

    隨著智能汽車的發(fā)展,車云通信的功能場(chǎng)景及數(shù)據(jù)量也逐漸增多,具有輕量化、可靠性等特點(diǎn)的MQTT協(xié)議成為很多OEM車云通信協(xié)議的選擇。本文主要介紹。 什么是
    的頭像 發(fā)表于 01-08 10:24 ?1038次閱讀
    基于<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>的車云<b class='flag-5'>通信</b>設(shè)計(jì)