MQTT協議學習筆記

2021-09-23 18:56:31 字數 2257 閱讀 4176

1、前沿

萬物聯網的時代即將到來,物聯網也由當初的概念開始進一步落實。隨著無線網路技術飛速發展,各種裝置都可以連線網路,實現遠端控制。例如智慧型家居最近非常火爆,智慧型插座、智慧型led燈、智慧型攝像頭等。在網際網路時代,http協議負責建立網路連線,而到了物聯網時代,由於智慧型硬體的差異,相比網際網路終端,硬體配置要低的多,而且智慧型裝置的環境也想多複雜,物聯網中的資料傳輸會面臨很多問題,比如在網路不穩定的情況下,如果保證資料的傳輸沒有問題,如何保證資料不被重**送,連線斷開後如何進行重連,而http協議由於太重量級了,不是適合物聯網。因此ibm公司為此提出一種輕量級的mqtt協議(mq telemetry transport),適合於低頻寬、不可靠連線、嵌入式裝置、cpu、記憶體資源緊張,適用於各種受限的環境。

2、協議特徵

(1)訊息模型

mqtt是一種基於**的發布/訂閱的訊息協議。提供一對多的訊息分發,解除應用程式耦合。乙個發布者可以對應多個訂閱者,當發布者發生變化的時候,他可以將訊息一一通知給所有的訂閱者。這種模式提供了更大的網路擴充套件性和更動態的網路拓撲。

(2)訊息質量

mqtt提供三種質量的服務:

1)至多一次,可能會出現丟包的現象。使用在對實時性要求不高的情況。這一級別可應用於如下情景,如環境感測器資料,丟失一次讀記錄無所謂,因為很快下一次讀記錄就會產生。

2)至少一次,保證包會到達目的地,但是可能出現重包。

3)正好一次,保證包會到達目的地,且不會出現重包的現象。這一級別可用於如計費系統等場景,在計費系統中,訊息丟失或重複可能會導致生成錯誤的費用。

(3)主題名稱

主題名稱(topic name)用來標識已發布訊息的資訊的渠道。訂閱者用它來確定接收到所關心的資訊。它是乙個分層的結構,用斜線「/」作為分隔符。有兩種萬用字元可以在主題發布、訂閱時使用:「#」和「+」。前者可以通配多層結構,而後者只能通配一層結構。例如乙個topic : 「a/b/c」,則「a/+/c」和「a/#」都可以和它相等。發布不支援模糊匹配,必須是確定的主題。

(4)遺屬

當乙個客戶端斷開連線的時候,它希望客戶端可以傳送它指定的訊息。該訊息和普通資訊的結構相同。通過設定該位並填入和資訊相關的內容即可。

(5)訊息型別

reserved0保留

connect

1客戶端到服務端的連線請求

connack

2服務端對連線請求的響應

publish

3發布訊息

puback

4對發布訊息的回應

pubrec

5 收到發布訊息(保證傳輸part1)

pubrel

6釋放發布訊息(保證傳輸part2)

pubcomp

7完成發布訊息(保證傳輸part3)

subscribe

8客戶端訂閱請求

subback

9訂閱請求的回應

unsubscribe

10停止訂閱請求

unsubback

11停止訂閱請求響應

pingreq

12ping請求(保持連線)

pingresp

13ping響應

disconnect

14客戶端正在斷開

reserved

15保留

開發乙個mqtt庫需要提供如下命令:

connect :當乙個tcp/ip套接字在伺服器端和客戶端連線建立時需要使用的命令。

publish  : 是由客戶端向服務端傳送,告訴伺服器端自己感興趣的topic。每乙個publishmessage 都會與乙個topic的名字聯絡在一起。

pubrec:   是publish命令的響應,只不過使用了2級qos協議。它是2級qos協議的第二條訊息

pubrel:    是2級qos協議的第三條訊息

publcomp: 是2級qos協議的第四條訊息

subscribe: 允許乙個客戶端註冊自已感興趣的topic 名字,發布到這些topic的訊息會以publish message的形式由伺服器端傳送給客戶端。

unsubscribe:  從客戶端到伺服器端,退訂乙個topic。

ping: 有客戶端向伺服器端傳送的「are you alive」的訊息。

disconnect:斷開這個tcp/ip協議

3、mqtt服務端和客戶端

mqtt協議官網:

MQTT協議學習筆記(一)

mqtt總共有figure 1中描述的14類的報文,報文格式統一為 固定報頭 可變報頭 負載 固定報頭的byte1,低四位都是保留位預設為0,高四位的值是figure 1中的值 注意要以hex格式表示 例如connect的固定報頭byte1為 10,disconnect報頭byte1為為 e0 剩餘...

MQTT協議學習

mqtt協議是目前物聯網最主要的協議,它的設計主要是運用於,低頻寬 低網速 差網路環境能夠保證資料的正常傳輸。mqtt協議基於tcp ip協議,運用訂閱發布模式,解除應用之間的耦合關係。客戶端與客戶端之間只需要知道伺服器位置。就可以傳輸資料 獲取資料。具體的協議和過程可以檢視這個中文幫助文件。裡面詳...

MQTT協議 MQTT協議簡介

mqtt messagequeuing telemetry transport,訊息佇列遙測傳輸 是ibm開發的乙個即時通訊協議。mqtt是面向m2m和物聯網的連線協議,採用輕量級發布和訂閱訊息傳輸機制。它的設計思想是輕巧 開放 簡單 規範,因此易於實現。這些特點使得它對很多場景來說都是很好的選擇,...