2023-02-22 MQTT協(xié)議詳解
1.MQTT協(xié)議概念:
MQTT是基于Publish/Subscribe(發(fā)布訂閱)模式的物聯(lián)網(wǎng)通信協(xié)議
特點(diǎn):
簡(jiǎn)單易實(shí)現(xiàn)
支持Qos(服務(wù)質(zhì)量)
報(bào)文小
MQTT協(xié)議構(gòu)建于TCP/IP協(xié)議之上
發(fā)布訂閱模式:

1.2 MQTT協(xié)議設(shè)計(jì)規(guī)范
(1) 精簡(jiǎn),不添加可有可無的功能;
(2) 發(fā)布/訂閱(Pub/Sub)模式,方便消息在傳感器之間傳遞,解耦Client/Server模式,帶來的好處在于不必預(yù)先知道對(duì)方的存在(ip/port), 不必同時(shí)運(yùn)行
(3) 允許用戶動(dòng)態(tài)創(chuàng)建主題(不需要預(yù)先創(chuàng)建主題),零運(yùn)維成本;
(4) 把傳輸量降到最低以提高傳輸效率
(5) 把低帶寬、高延遲、不穩(wěn)定的網(wǎng)絡(luò)等因素考慮在內(nèi);
(6) 支持連續(xù)的會(huì)話保持和控制(心跳協(xié)議)
(7) 理解客戶端計(jì)算能力可能很低
(8) 提供服務(wù)質(zhì)量( quality of service level: QoS)管理:
(9) 不強(qiáng)求傳輸數(shù)據(jù)的類型與格式,保持靈活性(指的使應(yīng)用層業(yè)務(wù)數(shù)據(jù))

1.3 MQTT協(xié)議主要特性
(1)開放消息協(xié)議,簡(jiǎn)單易實(shí)現(xiàn)。
(2)使用發(fā)布/訂閱消息模式,提供一對(duì)多的消息發(fā)布,解除應(yīng)用程序耦合。
(3)對(duì)負(fù)載(協(xié)議攜帶的應(yīng)用數(shù)據(jù))內(nèi)容屏蔽的消息傳輸。
(4)基于TCP/IP網(wǎng)絡(luò)連接,提供有序,無損,雙向連接。
主流的MQTT是基于TCP連接進(jìn)行數(shù)據(jù)推送的,但是同樣有基于UDP的版本,叫做MQTT-SN。這兩種版本由于基于不同的連接方式,優(yōu)缺點(diǎn)自然也就各有不同了。
由于基于不同的連接方式,優(yōu)缺點(diǎn)自然也就各有不同了。(5)消息服務(wù)質(zhì)量(QoS)支持,可靠傳輸保證;有三種消息發(fā)布服務(wù)質(zhì)量:
QoSO:“至多一次”,消息發(fā)布完全依賴底層TCP/IP網(wǎng)絡(luò)。會(huì)發(fā)生消息丟失或重復(fù)。這一級(jí)別可用于如下情況,環(huán)境傳感器數(shù)據(jù),丟失一次讀記錄無所謂,因?yàn)椴痪煤筮€會(huì)有第二次發(fā)送。這一種方式主要普通APP的推送,倘若你的智能設(shè)備在消息推送時(shí)未聯(lián)網(wǎng),推送過去沒收到,再次聯(lián)網(wǎng)也就收不到了。
QoS1:“至少—次”,確保消息到達(dá),但消息重復(fù)可能會(huì)發(fā)生。
QoS2:“只有一次”,確保消息到達(dá)一次。在一些要求比較嚴(yán)格的計(jì)費(fèi)系統(tǒng)中,可以使用此級(jí)別。在計(jì)費(fèi)系統(tǒng)中,消息重復(fù)或丟失會(huì)導(dǎo)致不正確的結(jié)果。這種最高質(zhì)量的消息發(fā)布服務(wù)還可以用于即時(shí)通訊類的APP的推送,確保用戶收到且只會(huì)收到一次。(6) 1字節(jié)固定報(bào)頭,2字節(jié)心跳報(bào)文,最小化傳輸開銷和協(xié)議交換,有效減少網(wǎng)絡(luò)流量。
這就是為什么在介紹里說它非常適合"在物聯(lián)網(wǎng)領(lǐng)域,傳感器與服務(wù)器的通信,信息的收集,要知道嵌入式設(shè)備的運(yùn)算能力和帶寬都相對(duì)薄弱,使用這種協(xié)議來傳遞消息再適合不過了。(7) 在線狀態(tài)感知:使用Last Will和Testament特性通知有關(guān)各方客戶端異常中斷的機(jī)制。
Last Will:即遺言機(jī)制,用于通知同一主題下的其他設(shè)備,發(fā)送遺言的設(shè)備已經(jīng)斷開了連接。
Testament:遺囑機(jī)制,功能類似于Last Will。
2. MQTT協(xié)議原理
2.1 MQTT協(xié)議實(shí)現(xiàn)方式
實(shí)現(xiàn)MQTT協(xié)議需要客戶端和服務(wù)器端通訊完成, 在通訊過程中, MQTT協(xié)議中有三種身份: 發(fā)布者(Publish)、代理(Broker)(服務(wù)器)、訂閱者(Subscribe)。 其中,消息的發(fā)布者和訂閱者都是客戶端,消息代理是服務(wù)器,消息發(fā)布者可以同時(shí)是訂閱者。

MQTT傳輸?shù)南⒎譃? 主題(Topic) 和 負(fù)載(payload)兩部分:
- (1) Topic: 可以理解為消息的類型,訂閱者訂閱(Subscribe)后,就會(huì)收到該主題的消息內(nèi)容(payload)
- (2) payload: 可以理解為消息的內(nèi)容,是指訂閱者具體要使用的內(nèi)容
參考鏈接:
https://blog.csdn.net/qq_30360351/article/details/127647832?ops_request_misc=&request_id=&biz_id=102&utm_term=mqtt%E5%8D%8F%E8%AE%AE&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-127647832.142^v73^wechat,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187