引言
MQTT(消息隊列遙測傳輸)是一種輕量級消息協議,專為低帶寬、高延遲和不可靠的網絡環境設計。它廣泛應用于物聯網(IoT)應用、消息系統以及實時數據通信領域。
本指南深入探討了 MQTT 的工作原理,解釋了其關鍵組件,并演示了如何使用 Python 實現 MQTT 客戶端。
MQTT 代理
MQTT 系統的核心是代理,它負責管理客戶端之間的消息交換。
MQTT 中的客戶端
發布者(Publishers):向特定主題發送消息的設備或應用程序。
訂閱者(Subscribers):監聽這些主題上的消息的設備或應用程序。
代理確保發布者的消息能夠可靠地傳遞給相應的訂閱者。
運行本地 MQTT 代理
在本示例中,代理托管在本地(127.0.0.1),這意味著它與 MQTT 客戶端運行在同一臺機器上。
代理在 Docker 容器中運行,使用 Mosquitto MQTT 代理,并映射到 1883 端口。mosquitto.conf 文件用于配置,允許消息保留和持久化。
MQTT 代理的工作原理
1.代理在 1883 端口監聽傳入消息。
2.客戶端連接到代理。
3.客戶端向特定主題發布消息。
4.代理接收并處理消息。
5.代理將消息轉發給所有訂閱該主題的客戶端。
發布者和訂閱者
發布者
發布者向特定主題發送消息,代理隨后將這些消息分發給感興趣的客戶端。
訂閱者
訂閱者監聽特定主題上的消息,并在收到消息時進行處理。
在 Python 中創建 MQTT 客戶端
Python 中的 Paho MQTT 庫允許創建可以發布和訂閱消息的 MQTT 客戶端。
創建 MQTT 客戶端
參數解釋
client_id="myClient1" → 為客戶端分配一個唯一標識符。
clean_session=True → 如果為 True,客戶端斷開連接時不會存儲會話數據。
protocol=mqtt.MQTTv311 → 指定 MQTT 版本為 3.1.1。
transport="tcp" → 使用 TCP 連接(也可以使用 WebSocket)。
連接到代理
mqtt_client_1.connect("127.0.0.1", port=1883, keepalive=240)
向主題發布消息
mqtt_client_1.publish("robotcell1/temperature", payload=25)
這將向主題 robotcell1/temperature 發送一條消息(25)。任何訂閱該主題的客戶端將立即收到此消息。
保留消息與非保留消息
保留消息(retain=True)
保留消息會持久化存儲在代理上,確保新訂閱者能立即收到最后一條消息。
mqtt_client_1.publish("robotcell1/temperature", payload=666, retain=True)
非保留消息(retain=False)
非保留消息僅在發送時被活動訂閱者接收。
服務質量(QoS)級別
MQTT 支持三種消息傳遞保證級別:
訂閱主題
all_messages = []def on_message(client, userdata, msg): print(f"Client: {userdata} | Topic: {msg.topic} | Message: {msg.payload} | Retained: {msg.retain}") all_messages.append(msg)mqtt_client_2 = mqtt.Client()mqtt_client_2.on_message = on_messagemqtt_client_2.connect("127.0.0.1", port=1883, keepalive=240)mqtt_client_2.subscribe("robotcell1/temperature", qos=0)mqtt_client_2.loop_start()
持久會話
默認情況下,當 MQTT 客戶端斷開連接時,它會丟失所有訂閱。如果 clean_session=False,代理會記住:
客戶端的訂閱。
客戶端錯過的任何 QoS 1 或 2 消息。
mqtt_client_1 = mqtt.Client(client_id="myClient1", clean_session=False)
結論
MQTT 是一種強大且輕量級的實時消息協議。通過利用發布者、訂閱者、代理、QoS 級別和保留消息,您可以構建一個適用于物聯網及其他領域的健壯消息系統。
我們很樂意為您提供工業樹莓派的解決方案,項目有需求請聯系我們~
我們的官方網站:www.edatec.cn/cn
如果覺得文章不錯記得點贊,收藏,關注,轉發~
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.