一種輕量級的消息傳輸協議-MQTT

嵌入式小美老師 發佈 2023-05-28T00:39:22.898875+00:00

paho-mqtt-c的開源的MQTT協議棧庫,Paho MQTT 是 Eclipse 實現的基於 MQTT 協議的客戶端。

正文


大家周末好,我是bug菌~

最近項目中用到了MQTT,感覺挺優秀的一種協議,所以這裡分享一些相關的知識。

1

什麼是MQTT

MQTT是一種輕量級的消息傳輸協議,用於物聯網設備和應用程式之間的通信。其最初由IBM開發,現在已成為開放的OASIS標準。

該協議基於發布/訂閱模式(Publish/Subscribe Pattern),支持多種質量等級(Quality of Service,QoS),可以實現可靠的消息傳輸和傳輸後的可靠存儲。

其主要特點如下:

1. 輕量級和低帶寬:採用二進位編碼和可變長度編碼,使得消息頭的大小儘可能小,能夠在低帶寬環境下進行高效的數據傳輸。

2. 靈活和可擴展:支持多種消息發布/訂閱模式,能夠靈活地適應不同的應用場景。同時,MQTT協議還支持多種質量等級,使得消息傳輸的可靠性和效率能夠根據應用的需求進行調整。

3. 可靠性和安全性:支持消息的持久化和存儲,能夠保證消息的可靠傳輸和傳輸後的可靠存儲。同時,還支持加密和認證等安全機制,能夠保證消息的安全傳輸和處理。

4. 易於使用和實現:議規範簡單明了,易於理解和實現。還提供了多種客戶端庫和開發工具,方便快速地使用和集成該協議。

2

MQTT開源庫

1、paho-mqtt-c的開源的MQTT協議棧庫,Paho MQTT 是 Eclipse 實現的基於 MQTT 協議的客戶端。

2、uMQTT,uMQTT 軟體包是 RT-Thread 自主研發的,基於 MQTT 3.1.1 協議的客戶端實現。

3

MQTT協議的設計

MQTT的核心設計模式是發布/訂閱模式(Publish/Subscribe Pattern),它是一種消息傳遞模式,用於解耦消息的發送者和接收者之間的關係。

在MQTT中,發布/訂閱模式的實現包括以下幾個核心概念:

1. 主題(Topic):主題是MQTT中消息的標識符,用於指定消息的內容和接收者。主題由一個或多個主題等級(Topic Level)組成,主題等級之間用斜槓(/)分隔。

例如,topic/a/b/c就是一個由三個主題等級組成的主題。

2. 客戶端(Client):MQTT中的客戶端是指連接到MQTT代理伺服器的設備或應用程式,它可以是發布者(Publisher)或訂閱者(Subscriber)。

3. 代理伺服器(Broker):MQTT中的代理伺服器是指負責接收、路由和轉發消息的中間件。代理伺服器會維護一個或多個主題,客戶端可以向代理伺服器發布消息或訂閱主題。

4. 發布者(Publisher):MQTT中的發布者是指發布消息的客戶端。發布者將消息發送到代理伺服器,代理伺服器會根據消息的主題將其路由到訂閱了相應主題的訂閱者。

5. 訂閱者(Subscriber):MQTT中的訂閱者是指訂閱主題的客戶端。訂閱者向代理伺服器訂閱特定的主題,代理伺服器會將訂閱者訂閱的主題和相關信息保存在訂閱列表中。當有新消息發布到訂閱者訂閱的主題時,代理伺服器會將消息發送給訂閱者。

在MQTT的發布/訂閱模式中,發布者和訂閱者之間是解耦的,它們不需要知道對方的存在和身份,只需要知道相應的主題即可。

這種設計模式使得MQTT具有高度的靈活性和擴展性,能夠適應不同的應用場景和需求。同時,MQTT還支持多種質量等級,可以根據應用的需求選擇不同的質量等級,以實現消息傳輸的可靠性和效率。


掃碼進群領資料

4

幾種應用模式

MQTT支持多種消息發布/訂閱模式,常見的應用模式如下:

1. 點對點模式(Point-to-Point):在點對點模式下,MQTT客戶端直接連接到MQTT代理伺服器,通過MQTT協議進行消息的傳輸。

這種模式適用於直接連接的物聯網設備和應用程式之間的通信,如傳感器和控制器之間的通信。

2. 發布/訂閱模式(Publish/Subscribe):在發布/訂閱模式下,MQTT客戶端通過訂閱主題(Topic)來接收感興趣的消息,通過發布主題來發送消息。

這種模式適用於需要解耦消息發送者和接收者之間的關係的應用場景,如物聯網中的實時數據傳輸、遠程控制和狀態監測等。

3. 請求/響應模式(Request/Response):在請求/響應模式下,MQTT客戶端通過請求主題(Request Topic)向MQTT代理伺服器發送請求消息,MQTT代理伺服器將請求消息路由到相應的處理程序,並返迴響應消息。

這種模式適用於需要請求和響應交互的應用場景,如物聯網中的遠程管理和控制等。

4. 點對多模式(Point-to-Multipoint):在點對多模式下,一個MQTT客戶端可以同時連接到多個MQTT代理伺服器,通過MQTT協議進行消息的傳輸。

這種模式適用於需要同時連接多個MQTT代理伺服器的應用場景,如物聯網中的分布式處理和數據存儲等。

5

簡單應用

下面以一個物聯網溫度監測系統為例,來說明MQTT的發布/訂閱模式:

假設物聯網溫度監測系統包括多個溫度傳感器和一個溫度數據中心,其中每個溫度傳感器都能夠實時採集溫度數據並將其發布到指定的主題上,溫度數據中心則訂閱了多個主題,能夠實時接收並處理溫度數據。

這個過程可以通過以下步驟來實現:

1. 溫度傳感器連接到MQTT代理伺服器,並發布溫度數據到指定的主題上,例如topic/temperature。

2. 溫度數據中心連接到MQTT代理伺服器,並訂閱溫度數據的主題,例如topic/temperature。

3. 當溫度傳感器發布新的溫度數據到主題topic/temperature時,MQTT代理伺服器將會將這條消息路由到訂閱了該主題的溫度數據中心上。

4. 溫度數據中心收到新的溫度數據後,可以對數據進行處理和存儲,例如計算平均溫度、生成報表等等。

通過這種方式,MQTT的發布/訂閱模式實現了溫度傳感器和溫度數據中心之間的解耦,不需要知道對方的存在和身份,只需要知道相應的主題即可實現實時的數據傳輸和處理。

最後

好了,今天就跟大家分享這麼多了,如果你覺得有所收穫,一定記得點個~


轉載自:最後一個bug

文章來源於一種輕量級的消息傳輸協議-MQTT

原文連結:https://mp.weixin.qq.com/s/dsmymOiH7eHSgMeikvdgUQ

關鍵字: