天天看點

一種輕量級的消息傳輸協定-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

在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還支援多種品質等級,可以根據應用的需求選擇不同的品質等級,以實作消息傳輸的可靠性和效率。

掃碼進群領資料

一種輕量級的消息傳輸協定-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

繼續閱讀