摘要:協(xié)議簡(jiǎn)介,消息隊(duì)列遙測(cè)傳輸是一個(gè)輕量的發(fā)布訂閱模式消息傳輸協(xié)議,是專(zhuān)門(mén)針對(duì)低帶寬和不穩(wěn)定網(wǎng)絡(luò)環(huán)境的物聯(lián)網(wǎng)應(yīng)用設(shè)計(jì)的。它是等級(jí)協(xié)議交換的第二個(gè)報(bào)文。
MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸)是一個(gè)輕量的發(fā)布/訂閱模式消息傳輸協(xié)議,是專(zhuān)門(mén)針對(duì)低帶寬和不穩(wěn)定網(wǎng)絡(luò)環(huán)境的物聯(lián)網(wǎng)應(yīng)用設(shè)計(jì)的。
特點(diǎn):
????????1.開(kāi)放消息協(xié)議,易實(shí)現(xiàn)
????????2.發(fā)布訂閱模式,一對(duì)多消息發(fā)布
????????3.基于TCP/IP網(wǎng)絡(luò)連接
????????4.報(bào)文結(jié)構(gòu)緊湊
????????5.消息QoS支持,保證可靠傳輸
MQTT協(xié)議原理
????????(2)payload可以理解為消息的內(nèi)容,是指訂閱者具體要使用的內(nèi)容。
MQTT協(xié)議服務(wù)器?:
????????MQTT服務(wù)器以稱(chēng)為“消息代理”(Broker),它是位于消息發(fā)布者和訂閱者之間,服務(wù)器可以:
????????(1)接受來(lái)自客戶端的網(wǎng)絡(luò)連接;
????????(2)接受客戶端發(fā)布的信息;
????????(3)處理來(lái)自客戶端的訂閱和退訂請(qǐng)求;
????????(4)向訂閱的客戶轉(zhuǎn)發(fā)消息。
?MQTT協(xié)議客戶端:
????????一個(gè)使用MQTT協(xié)議設(shè)備,它總是建立到服務(wù)器的網(wǎng)絡(luò)連接,客戶端可以:
????????(1)發(fā)布其他客戶端可能會(huì)訂閱的信息;
????????(2)訂閱其它客戶端發(fā)布的消息;
????????(3)退訂或刪除消息;
????????(4)斷開(kāi)與服務(wù)器連接。
MQTT協(xié)議棧
MQTT協(xié)議數(shù)據(jù)包結(jié)構(gòu):
在MQTT協(xié)議中,一個(gè)MQTT數(shù)據(jù)包由:固定頭(Fixed header)、可變頭(Variable header)、消息體(Payload)三部分構(gòu)成。MQTT數(shù)據(jù)包結(jié)構(gòu)如下:
?Fixed Header(固定報(bào)文頭)
?Variable Header &Payload
2.1? CONNECT報(bào)文解讀
Clean Session:清理會(huì)話,用于控制會(huì)話狀態(tài)的生存時(shí)間,標(biāo)志被設(shè)置為 1,客戶端和服務(wù)端 必須丟棄之前的任何會(huì)話并開(kāi)始一個(gè)新的會(huì)話。標(biāo)志被設(shè)置為 0,服務(wù)端 必須基于當(dāng)前會(huì)話(使用客戶端標(biāo)識(shí)符識(shí)別)的狀態(tài)恢復(fù)與客戶端的通信;
Will Flag:遺囑標(biāo)志設(shè)置為 1,表示如果連接請(qǐng)求被接受了,遺囑(Will Message)消息 必須被存儲(chǔ)在服務(wù)端;
QoS:遺囑消息服務(wù)質(zhì)量等級(jí),遺囑標(biāo)志被設(shè)置為 0,遺囑 QoS 也設(shè)置為 0;遺囑標(biāo)志被設(shè)置為 1,遺囑 QoS 的值可以等于 0,1,2;
User Name Flag:用戶名標(biāo)志,標(biāo)志被設(shè)置為 0,有效載荷中 不能包含用戶名字段,標(biāo)志被設(shè)置為 1,有效載荷中 必須包含用戶名字段;
Password Flag:密碼標(biāo)志,標(biāo)志被設(shè)置為 0,有效載荷中 不能包含密碼字段,標(biāo)志被設(shè)置為 1,有效載荷中必須包含密碼字段;
2.2? CONNACK 報(bào)文解讀
?返回碼說(shuō)明:
?服務(wù)端發(fā)送給客戶端的第一個(gè)報(bào)文 是 CONNACK,服務(wù)端發(fā)送 CONNACK 報(bào)文響應(yīng)從客戶端收到的 CONNECT 報(bào)文。
Sp: Session Present Flag
當(dāng)前會(huì)話標(biāo)志
session信息在服務(wù)器已保持,置1;
未保存,置0。
2.3 PUBLISH(C<>S)發(fā)布消息報(bào)文解讀
DUP:重發(fā)標(biāo)志
QoS2、Qos1:如果為0,則表示是第一次發(fā)送該包,如果為1,則表示為重復(fù)發(fā)送的包。
Qos0:DUP必須為0
QOS: 指定了該Publish包的Qos等級(jí)如下
RETAIN: 保留標(biāo)志位,如果為1,服務(wù)器存儲(chǔ)最新一條RETAIN消息,以便分發(fā)給新的訂閱者;
2.4. PUBACK? 收到發(fā)布消息確認(rèn)報(bào)文解讀
PUBACK 報(bào)文是對(duì) QoS 1 等級(jí)的 PUBLISH 報(bào)文的響應(yīng)。
2.5 PUBREC? 發(fā)布消息收到
PUBREC 報(bào)文是對(duì) QoS 等級(jí) 2 的 PUBLISH 報(bào)文的響應(yīng)。它是 QoS 2 等級(jí)協(xié)議交換的第二個(gè)報(bào)文。
2.6 PUBRECL? 發(fā)布消息釋放報(bào)文解讀
PUBREL 報(bào)文是對(duì) PUBREC 報(bào)文的響應(yīng)。它是 QoS 2 等級(jí)協(xié)議交換的第三個(gè)報(bào)文。
2.7 PUBCOMP? 發(fā)布完成報(bào)文解讀
PUBCOMP 報(bào)文是對(duì) PUBREL 報(bào)文的響應(yīng)。它是 QoS 2 等級(jí)協(xié)議交換的第四個(gè)也是最后一個(gè)報(bào)文。
2.8 SUBSCRIBE? 訂閱主題報(bào)文解讀
?SUBSCRIBE 報(bào)文的有效載荷包含了一個(gè)主題,它們表示客戶端想要訂閱的主題,后面跟著一個(gè)字節(jié),這個(gè)字節(jié)被叫做 服務(wù)質(zhì)量要求(Requested QoS)。它給出了服務(wù)端向客戶端發(fā)送應(yīng)用消息所允許的QoS 等級(jí)。
2.9 SUBACK? 訂閱確認(rèn)報(bào)文解讀
返回碼說(shuō)明:
2.10? UNSUBSCRIBE? 取消訂閱報(bào)文解讀
??UNSUBSCRIBE 報(bào)文提供的主題與服務(wù)端持有的這個(gè)客戶端的當(dāng)前主題集合逐個(gè)字符比較。如果主題完全匹配,那么它(服務(wù)端)自己的訂閱將被刪除,否則不會(huì)有進(jìn)一步的處理。
2.11 UNSUBACK? 取消訂閱確認(rèn)
可變報(bào)頭包含等待確認(rèn)的 UNSUBSCRIBE 報(bào)文的報(bào)文標(biāo)識(shí)符。
2.12 PINGREQ? 心跳請(qǐng)求報(bào)文解讀
2.13 PINGRESP? 心跳響應(yīng)報(bào)文解讀
客戶端發(fā)送 PINGREQ 報(bào)文給服務(wù)端的。用于:
1. 在沒(méi)有任何其它控制報(bào)文從客戶端發(fā)給服務(wù)的時(shí),告知服務(wù)端客戶端還活著。
2. 請(qǐng)求服務(wù)端發(fā)送 響應(yīng)確認(rèn)它還活著。
3. 使用網(wǎng)絡(luò)以確認(rèn)網(wǎng)絡(luò)連接沒(méi)有斷開(kāi)。
14. DISCONNECT? 斷開(kāi)連接
客戶端發(fā)送 DISCONNECT 報(bào)文之后:
服務(wù)端在收到 DISCONNECT 報(bào)文時(shí):
3.1 連接流程
?3.2 發(fā)布消息流程
平臺(tái)收到上報(bào)數(shù)據(jù)點(diǎn)后保存起來(lái)
?
3.3 訂閱流程
設(shè)備發(fā)起訂閱請(qǐng)求;
平臺(tái)收到請(qǐng)求后更新topic列表;
平臺(tái)給設(shè)備回復(fù)SubAck;
subscribe的requestqos級(jí)別可以為0、1、2。
?3.5 連接保活流程
客戶端發(fā)送 PINGREQ 報(bào)文給服務(wù)端的,服務(wù)端發(fā)送 PINGRESP 報(bào)文響應(yīng)客戶端的 PINGREQ 報(bào)文,表示服務(wù)端還活著。
3.6 斷開(kāi)連接流程
DISCONNECT 報(bào)文是客戶端發(fā)給服務(wù)端的最后一個(gè)控制報(bào)文,表示客戶端正常斷開(kāi)連接。
級(jí)別0:最多一次,消息發(fā)送者會(huì)想盡辦法發(fā)送消息,但是遇到意外并不會(huì)重試,這一級(jí)別會(huì)發(fā)生消息丟失。
?
?MQTT發(fā)布消息QoS保證不是端到端的,是客戶端與服務(wù)器之間的。訂閱者收到MQTT消息的QoS級(jí)別,最終取決于發(fā)布消息的QoS和主題訂閱的QoS。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/120928.html
摘要:協(xié)議版本介紹互聯(lián)網(wǎng)的基礎(chǔ)網(wǎng)絡(luò)協(xié)議是協(xié)議消息隊(duì)列遙測(cè)傳輸是基于協(xié)議棧而構(gòu)建的已成為通信的標(biāo)準(zhǔn)為什么選擇有多好多好多么牛逼我就不說(shuō)了說(shuō)的再多不如一個(gè)一個(gè)試試完了做比對(duì)剩下的那個(gè)就是要選擇的實(shí)在不想這樣搞技術(shù)就跟著一線走發(fā)布和訂閱模型協(xié)議在網(wǎng)絡(luò)中 mqtt 協(xié)議版本: 3.1.1 MQTT 介紹 互聯(lián)網(wǎng)的基礎(chǔ)網(wǎng)絡(luò)協(xié)議是 TCP/IP協(xié)議. MQTT(消息隊(duì)列遙測(cè)傳輸)是基于 TCP/IP 協(xié)...
摘要:現(xiàn)在很多網(wǎng)站都通過(guò)服務(wù)來(lái)實(shí)現(xiàn)消息推送及數(shù)據(jù)即時(shí)同步功能,即時(shí)通訊組件逐漸成為產(chǎn)品的標(biāo)配。目前國(guó)內(nèi)有很多成熟穩(wěn)定的第三方即時(shí)通訊服務(wù)廠家,比如融云。 現(xiàn)在很多網(wǎng)站、APP都通過(guò)IM服務(wù)來(lái)實(shí)現(xiàn)消息推送及數(shù)據(jù)即時(shí)同步功能,即時(shí)通訊組件逐漸成為產(chǎn)品的標(biāo)配。目前國(guó)內(nèi)有很多成熟穩(wěn)定的第三方即時(shí)通訊服務(wù)廠家,比如:融云。使用這些專(zhuān)業(yè)的服務(wù)可以提高開(kāi)發(fā)效率而且服務(wù)穩(wěn)定有保障。 如果自己DIY或者需要在...
摘要:前言作為一個(gè)消息代理客戶端與服務(wù)端的通信時(shí)基于協(xié)議的而現(xiàn)在的主流應(yīng)用時(shí)呈現(xiàn)在瀏覽器中這意味著用戶與服務(wù)端只能通過(guò)或者這類(lèi)瀏覽器能理解的協(xié)議傳輸所以后端還要建立一個(gè)代理層將協(xié)議傳輸?shù)膬?nèi)容解析一下以協(xié)議發(fā)送到最后再由發(fā)送到硬件端在瀏覽器支持的協(xié) 前言 mosquitto 作為一個(gè)消息代理, 客戶端與 mosquitto 服務(wù)端的通信時(shí)基于 MQTT 協(xié)議的, 而現(xiàn)在的主流 web 應(yīng)用時(shí)呈...
摘要:前言作為一個(gè)消息代理客戶端與服務(wù)端的通信時(shí)基于協(xié)議的而現(xiàn)在的主流應(yīng)用時(shí)呈現(xiàn)在瀏覽器中這意味著用戶與服務(wù)端只能通過(guò)或者這類(lèi)瀏覽器能理解的協(xié)議傳輸所以后端還要建立一個(gè)代理層將協(xié)議傳輸?shù)膬?nèi)容解析一下以協(xié)議發(fā)送到最后再由發(fā)送到硬件端在瀏覽器支持的協(xié) 前言 mosquitto 作為一個(gè)消息代理, 客戶端與 mosquitto 服務(wù)端的通信時(shí)基于 MQTT 協(xié)議的, 而現(xiàn)在的主流 web 應(yīng)用時(shí)呈...
摘要:前言前些日子了解到這樣一個(gè)協(xié)議,可以在上達(dá)到即時(shí)通訊的效果,但網(wǎng)上并不能很方便地找到一篇目前版本的在下正確實(shí)現(xiàn)這個(gè)協(xié)議的博客。 前言 前些日子了解到mqtt這樣一個(gè)協(xié)議,可以在web上達(dá)到即時(shí)通訊的效果,但網(wǎng)上并不能很方便地找到一篇目前版本的在node下正確實(shí)現(xiàn)這個(gè)協(xié)議的博客。 自己搗鼓了一段時(shí)間,理解不深刻,但也算是基本能夠達(dá)到使用目的。 本文目的為對(duì)MQTT有需求的學(xué)習(xí)者提供一定程...
閱讀 2139·2023-04-26 02:41
閱讀 2172·2021-09-24 09:47
閱讀 1577·2019-08-30 15:53
閱讀 1232·2019-08-30 13:01
閱讀 1910·2019-08-29 11:27
閱讀 2885·2019-08-28 17:55
閱讀 1805·2019-08-26 14:00
閱讀 3455·2019-08-26 10:18