最近項目中用到了MQTT,感覺挺優(yōu)秀的一種協(xié)議,所以這里分享一些相關(guān)的知識。
1
什么是MQTT
MQTT是一種輕量級的消息傳輸協(xié)議,用于物聯(lián)網(wǎng)設(shè)備和應(yīng)用程序之間的通信。其最初由IBM開發(fā),現(xiàn)在已成為開放的OASIS標(biāo)準(zhǔn)。
該協(xié)議基于發(fā)布/訂閱模式(Publish/Subscribe Pattern),支持多種質(zhì)量等級(Quality of Service,QoS),可以實現(xiàn)可靠的消息傳輸和傳輸后的可靠存儲。
其主要特點如下:
1. 輕量級和低帶寬:采用二進(jìn)制編碼和可變長度編碼,使得消息頭的大小盡可能小,能夠在低帶寬環(huán)境下進(jìn)行高效的數(shù)據(jù)傳輸。
2. 靈活和可擴(kuò)展:支持多種消息發(fā)布/訂閱模式,能夠靈活地適應(yīng)不同的應(yīng)用場景。同時,MQTT協(xié)議還支持多種質(zhì)量等級,使得消息傳輸?shù)目煽啃院托誓軌蚋鶕?jù)應(yīng)用的需求進(jìn)行調(diào)整。
3. 可靠性和安全性:支持消息的持久化和存儲,能夠保證消息的可靠傳輸和傳輸后的可靠存儲。同時,還支持加密和認(rèn)證等安全機(jī)制,能夠保證消息的安全傳輸和處理。
4. 易于使用和實現(xiàn):議規(guī)范簡單明了,易于理解和實現(xiàn)。還提供了多種客戶端庫和開發(fā)工具,方便快速地使用和集成該協(xié)議。
2
MQTT開源庫
1、paho-mqtt-c的開源的MQTT協(xié)議棧庫,Paho MQTT 是 Eclipse 實現(xiàn)的基于 MQTT 協(xié)議的客戶端。
2、uMQTT,uMQTT 軟件包是 RT-Thread 自主研發(fā)的,基于 MQTT 3.1.1 協(xié)議的客戶端實現(xiàn)。
3
MQTT協(xié)議的設(shè)計
MQTT的核心設(shè)計模式是發(fā)布/訂閱模式(Publish/Subscribe Pattern),它是一種消息傳遞模式,用于解耦消息的發(fā)送者和接收者之間的關(guān)系。
在MQTT中,發(fā)布/訂閱模式的實現(xiàn)包括以下幾個核心概念:
1. 主題(Topic):主題是MQTT中消息的標(biāo)識符,用于指定消息的內(nèi)容和接收者。主題由一個或多個主題等級(Topic Level)組成,主題等級之間用斜杠(/)分隔。
例如,topic/a/b/c就是一個由三個主題等級組成的主題。
2. 客戶端(Client):MQTT中的客戶端是指連接到MQTT代理服務(wù)器的設(shè)備或應(yīng)用程序,它可以是發(fā)布者(Publisher)或訂閱者(Subscriber)。
3. 代理服務(wù)器(Broker):MQTT中的代理服務(wù)器是指負(fù)責(zé)接收、路由和轉(zhuǎn)發(fā)消息的中間件。代理服務(wù)器會維護(hù)一個或多個主題,客戶端可以向代理服務(wù)器發(fā)布消息或訂閱主題。
4. 發(fā)布者(Publisher):MQTT中的發(fā)布者是指發(fā)布消息的客戶端。發(fā)布者將消息發(fā)送到代理服務(wù)器,代理服務(wù)器會根據(jù)消息的主題將其路由到訂閱了相應(yīng)主題的訂閱者。
5. 訂閱者(Subscriber):MQTT中的訂閱者是指訂閱主題的客戶端。訂閱者向代理服務(wù)器訂閱特定的主題,代理服務(wù)器會將訂閱者訂閱的主題和相關(guān)信息保存在訂閱列表中。當(dāng)有新消息發(fā)布到訂閱者訂閱的主題時,代理服務(wù)器會將消息發(fā)送給訂閱者。
在MQTT的發(fā)布/訂閱模式中,發(fā)布者和訂閱者之間是解耦的,它們不需要知道對方的存在和身份,只需要知道相應(yīng)的主題即可。
這種設(shè)計模式使得MQTT具有高度的靈活性和擴(kuò)展性,能夠適應(yīng)不同的應(yīng)用場景和需求。同時,MQTT還支持多種質(zhì)量等級,可以根據(jù)應(yīng)用的需求選擇不同的質(zhì)量等級,以實現(xiàn)消息傳輸?shù)目煽啃院托省?/p>
4
幾種應(yīng)用模式
MQTT支持多種消息發(fā)布/訂閱模式,常見的應(yīng)用模式如下:
1. 點對點模式(Point-to-Point):在點對點模式下,MQTT客戶端直接連接到MQTT代理服務(wù)器,通過MQTT協(xié)議進(jìn)行消息的傳輸。
這種模式適用于直接連接的物聯(lián)網(wǎng)設(shè)備和應(yīng)用程序之間的通信,如傳感器和控制器之間的通信。
2. 發(fā)布/訂閱模式(Publish/Subscribe):在發(fā)布/訂閱模式下,MQTT客戶端通過訂閱主題(Topic)來接收感興趣的消息,通過發(fā)布主題來發(fā)送消息。
這種模式適用于需要解耦消息發(fā)送者和接收者之間的關(guān)系的應(yīng)用場景,如物聯(lián)網(wǎng)中的實時數(shù)據(jù)傳輸、遠(yuǎn)程控制和狀態(tài)監(jiān)測等。
3. 請求/響應(yīng)模式(Request/Response):在請求/響應(yīng)模式下,MQTT客戶端通過請求主題(Request Topic)向MQTT代理服務(wù)器發(fā)送請求消息,MQTT代理服務(wù)器將請求消息路由到相應(yīng)的處理程序,并返回響應(yīng)消息。
這種模式適用于需要請求和響應(yīng)交互的應(yīng)用場景,如物聯(lián)網(wǎng)中的遠(yuǎn)程管理和控制等。
4. 點對多模式(Point-to-Multipoint):在點對多模式下,一個MQTT客戶端可以同時連接到多個MQTT代理服務(wù)器,通過MQTT協(xié)議進(jìn)行消息的傳輸。
這種模式適用于需要同時連接多個MQTT代理服務(wù)器的應(yīng)用場景,如物聯(lián)網(wǎng)中的分布式處理和數(shù)據(jù)存儲等。
5
簡單應(yīng)用
下面以一個物聯(lián)網(wǎng)溫度監(jiān)測系統(tǒng)為例,來說明MQTT的發(fā)布/訂閱模式:
假設(shè)物聯(lián)網(wǎng)溫度監(jiān)測系統(tǒng)包括多個溫度傳感器和一個溫度數(shù)據(jù)中心,其中每個溫度傳感器都能夠?qū)崟r采集溫度數(shù)據(jù)并將其發(fā)布到指定的主題上,溫度數(shù)據(jù)中心則訂閱了多個主題,能夠?qū)崟r接收并處理溫度數(shù)據(jù)。
這個過程可以通過以下步驟來實現(xiàn):
1. 溫度傳感器連接到MQTT代理服務(wù)器,并發(fā)布溫度數(shù)據(jù)到指定的主題上,例如topic/temperature。
2. 溫度數(shù)據(jù)中心連接到MQTT代理服務(wù)器,并訂閱溫度數(shù)據(jù)的主題,例如topic/temperature。
3. 當(dāng)溫度傳感器發(fā)布新的溫度數(shù)據(jù)到主題topic/temperature時,MQTT代理服務(wù)器將會將這條消息路由到訂閱了該主題的溫度數(shù)據(jù)中心上。
4. 溫度數(shù)據(jù)中心收到新的溫度數(shù)據(jù)后,可以對數(shù)據(jù)進(jìn)行處理和存儲,例如計算平均溫度、生成報表等等。
通過這種方式,MQTT的發(fā)布/訂閱模式實現(xiàn)了溫度傳感器和溫度數(shù)據(jù)中心之間的解耦,不需要知道對方的存在和身份,只需要知道相應(yīng)的主題即可實現(xiàn)實時的數(shù)據(jù)傳輸和處理。
審核編輯:劉清
-
溫度傳感器
+關(guān)注
關(guān)注
48文章
2950瀏覽量
156183 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1293瀏覽量
40230 -
MQTT協(xié)議
+關(guān)注
關(guān)注
0文章
98瀏覽量
5439
原文標(biāo)題:一種輕量級的消息傳輸協(xié)議-MQTT
文章出處:【微信號:最后一個bug,微信公眾號:最后一個bug】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論