LIERDA
隨著 5G 時代的來臨,萬物互聯(lián)的偉大構(gòu)想正在成為現(xiàn)實。2021年全球智能物聯(lián)網(wǎng)處于爆發(fā)式增長通道,設(shè)備數(shù)量超過250億臺。海量的設(shè)備接入和設(shè)備管理對網(wǎng)絡(luò)帶寬、通信協(xié)議以及平臺服務(wù)架構(gòu)都帶來了很大挑戰(zhàn)。
物聯(lián)網(wǎng)通信協(xié)議作為聯(lián)通物與物的橋梁,在整個架構(gòu)中起著關(guān)鍵作用。本文將以利爾達(dá)MB960/860模組為例,介紹如何接入云平臺MQTT協(xié)議搭建系統(tǒng),幫助大家快速上手。
MQTT介紹
MQTT是一種基于發(fā)布/訂閱模式實現(xiàn)一對多通信的協(xié)議。它可為深度嵌入式設(shè)備提供物聯(lián)網(wǎng)的規(guī)模和連接性,憑借簡單易實現(xiàn)、支持 QoS、報文小等特點,占據(jù)了物聯(lián)網(wǎng)協(xié)議的半壁江山
MQTT由3種身份構(gòu)成,分別是中介代理(broker)、發(fā)布者(publisher)和訂閱者(subscriber)。消息的發(fā)布者和訂閱者是客戶端,中介代理是服務(wù)器,消息的發(fā)布者同時可以是訂閱者。
作為一種輕量級的二進制協(xié)議,MQTT協(xié)議與傳統(tǒng)HTTP相比具有一個明顯的優(yōu)勢:數(shù)據(jù)包開銷較小,數(shù)據(jù)包開銷小就意味著更容易進行網(wǎng)絡(luò)傳輸。還有一個優(yōu)勢就是MQTT在客戶端容易實現(xiàn),且具易用性,非常適合在蜂窩物聯(lián)網(wǎng)等資源有限的設(shè)備實現(xiàn)。
MQTT 重要概念
1、MQTT client
當(dāng)我們討論關(guān)于客戶端的概念時,一般指的就是MQTT Client,包含publisher和subscriber。之所以有發(fā)布者和訂閱者這個概念,其實是一種相對的概念,就是指當(dāng)前客戶端是在發(fā)布消息還是在接收消息,發(fā)布和訂閱的功能也可以由同一個 MQTT Client 實現(xiàn)。
MQTT 客戶端是指運行 MQTT 庫并通過網(wǎng)絡(luò)連接到 MQTT broker 的任何設(shè)備,這些設(shè)備可以從微控制器到成熟的服務(wù)器。基本上任何使用 TCP/IP 協(xié)議使用 MQTT 設(shè)備的都可以稱之為MQTT Client。MQTT 協(xié)議的客戶端實現(xiàn)非常簡單直接。易于實施是MQTT非常適合小型設(shè)備的原因之一。MQTT客戶端庫可用于多種編程語言,例如Android、Arduino、C、C++、C#、Go、iOS、Java、JavaScript 和 .NET。
2、MQTT broker
與 MQTT client 對應(yīng)的就是 MQTT broker,broker 是任何發(fā)布/訂閱機構(gòu)的核心,根據(jù)實現(xiàn)的不同,代理可以處理多達(dá)數(shù)百萬連接的 MQTT client。
broker 負(fù)責(zé)接收所有消息,過濾消息,確定是哪個 client 訂閱了每條消息,并將消息發(fā)送給對應(yīng)的 client,broker 還負(fù)責(zé)保存會話數(shù)據(jù),這些數(shù)據(jù)包括訂閱的和錯過的消息。broker 還負(fù)責(zé)客戶端的身份驗證和授權(quán)。
3、MQTT Connection
MQTT 是基于 TCP/IP 協(xié)議基礎(chǔ)之上的,所以 MQTT 的 client 和 broker 都需要 TCP/IP 協(xié)議的支持。
MQTT的連接總是在client和broker之間進行,client和 client之間并不會相互連接。如果要發(fā)起連接的話,那么 client就會向broker發(fā)起CONNECT消息,代理會使用 CONNACK消息和狀態(tài)碼進行響應(yīng)。一旦client和 broker的連接建立后,broker就會使客戶端的連接一直處于打開狀態(tài),直到client發(fā)出斷開命令或者連接中斷。
MQTT基于主題(Topic)消息路由
1、主題(Topic)
MQTT協(xié)議基于主題(Topic)進行消息路由,主題(Topic)類似URL路徑,例如:
chat/room/1
sensor/10/temperature
sensor/+/temperature
$SYS/broker/metrics/packets/received
$SYS/broker/metrics/#
主題(Topic)通過’/’分割層級,支持’+’, ‘#’通配符:
'+': 表示通配一個層級,例如a/+,匹配a/x, a/y
'#': 表示通配多個層級,例如a/#,匹配a/x, a/b/c/d
訂閱者與發(fā)布者之間通過主題路由消息進行通信,例如采用mosquitto命令行發(fā)布訂閱消息:
mosquitto_sub -t a/b/+ -q 1
mosquitto_pub -t a/b/c -m hello -q 1
注解:
訂閱者可以訂閱含通配符主題,但發(fā)布者不允許向含通配符主題發(fā)布消息。
2、MQTT消息QoS
MQTT發(fā)布消息QoS保證不是端到端的,是客戶端與服務(wù)器之間的。訂閱者收到MQTT消息的QoS級別,最終取決于發(fā)布消息的QoS和主題訂閱的QoS。
發(fā)布消息的QoS | 主題訂閱的QoS | 接收消息的QoS |
0 | 0 | 0 |
0 | 1 | 0 |
0 | 2 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
1 | 2 | 1 |
2 | 0 | 0 |
2 | 1 | 1 |
2 | 2 | 2 |
Qos0消息發(fā)布訂閱
Qos1消息發(fā)布訂閱
Qos2消息發(fā)布訂閱
-
MQTT
+關(guān)注
關(guān)注
5文章
653瀏覽量
22658
發(fā)布評論請先 登錄
相關(guān)推薦
評論