国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在MQTT中發布和訂閱實體

陳斌 ? 來源:jf_44873076 ? 作者:jf_44873076 ? 2025-05-20 17:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在MQTT中發布和訂閱實體(主題)是MQTT通信的核心操作,下面將詳細介紹其原理、步驟以及示例代碼,幫助你全面理解這一過程。

一、MQTT發布與訂閱的基本概念

發布(Publish):客戶端將消息發送到MQTT代理(Broker)上的特定主題(Topic)。發布者無需知道有哪些客戶端訂閱了該主題,只需將消息發送到代理即可。

訂閱(Subscribe):客戶端向MQTT代理注冊感興趣的主題,當有消息發布到這些主題時,代理會將消息推送給訂閱者。訂閱者可以訂閱一個或多個主題。

主題(Topic):主題是MQTT中的消息分類標識,使用類似文件路徑的字符串表示,例如"home/livingroom/temperature"。主題支持通配符,#表示多級通配符,+表示單級通配符。

二、發布和訂閱的步驟

(一)建立MQTT連接

在發布或訂閱消息之前,客戶端需要先與MQTT代理建立連接。這通常涉及以下參數:

代理地址和端口:例如tcp://broker.hivemq.com:1883。

客戶端ID:用于唯一標識客戶端。

用戶名和密碼(可選):用于身份驗證。

QoS等級:消息質量服務等級,分為0(最多一次)、1(至少一次)、2(恰好一次)。

(二)訂閱主題

客戶端通過訂閱特定主題來接收相關消息。訂閱操作可以指定QoS等級,代理會按照該等級向訂閱者推送消息。

(三)發布消息

客戶端將消息發布到指定的主題。發布時需要指定主題名稱、消息內容和QoS等級。

(四)消息接收與處理

訂閱者接收到代理推送的消息后,可以對消息進行處理,例如解析JSON數據、更新UI界面等。

(五)斷開連接

當客戶端不再需要通信時,可以斷開與MQTT代理的連接。

三、代碼示例

以下是使用Python的paho-mqtt庫實現MQTT發布和訂閱的示例代碼:

(一)訂閱者代碼

pythonimport paho.mqtt.client as mqtt # 定義連接回調函數def on_connect(client, userdata, flags, rc): print("Connected with result code " + str(rc)) # 訂閱主題 client.subscribe("home/livingroom/#") # 使用通配符訂閱多級主題 # 定義消息接收回調函數def on_message(client, userdata, msg): print(f"Received message on topic {msg.topic}: {msg.payload.decode()}") # 創建MQTT客戶端實例client = mqtt.Client() # 設置回調函數client.on_connect = on_connectclient.on_message = on_message # 連接到MQTT代理client.connect("broker.hivemq.com", 1883, 60) # 啟動網絡循環,處理網絡消息和回調函數client.loop_forever()

(二)發布者代碼

pythonimport paho.mqtt.client as mqttimport time # 創建MQTT客戶端實例client = mqtt.Client() # 連接到MQTT代理client.connect("broker.hivemq.com", 1883, 60) # 發布消息的函數def publish_message(topic, payload, qos=0): result = client.publish(topic, payload, qos) # result是一個元組,包含消息ID和中間隊列對象 status = result[0] if status == 0: print(f"Message '{payload}' published to topic '{topic}'") else: print(f"Failed to publish message to topic '{topic}'") # 發布多條消息topics = ["home/livingroom/temperature", "home/livingroom/humidity", "home/kitchen/temperature"]payloads = ["25.5", "60", "22.0"] for topic, payload in zip(topics, payloads): publish_message(topic, payload, qos=1) # 使用QoS等級1發布消息 time.sleep(1) # 等待1秒,模擬不同時間點的發布 # 斷開連接client.disconnect()

四、關鍵點說明

主題設計

層次結構:使用斜杠(/)分隔主題的各個層級,例如"home/livingroom/temperature"。這種層次結構便于對消息進行分類和管理。

通配符使用:+表示單級通配符,匹配任意一級主題;#表示多級通配符,必須放在主題末尾,匹配任意多級主題。例如,"home/+/temperature"可以匹配"home/livingroom/temperature"和"home/kitchen/temperature",而"home/#"可以匹配"home/livingroom/temperature"、"home/kitchen/light"等所有以"home/"開頭的主題。

QoS等級選擇

QoS 0:最多一次。消息發送后不等待確認,可能會丟失,適用于對消息可靠性要求不高的場景,如實時性要求較高但允許少量數據丟失的環境監測

QoS 1:至少一次。消息發送后會等待確認,如果未收到確認會重發,可能會重復接收消息,適用于對消息可靠性有一定要求但允許少量重復的場景,如智能家居中的設備控制指令。

QoS 2:恰好一次。消息發送和接收會經過多次握手確認,確保消息只被接收一次,但開銷較大,適用于對消息可靠性要求極高的場景,如金融交易數據傳輸。

錯誤處理

在實際應用中,需要處理連接失敗、消息發布失敗等情況。例如,在連接代理時,可以檢查返回的連接結果碼,如果連接失敗則進行重試或報警。

通過以上步驟和示例代碼,你可以在MQTT中實現實體(主題)的發布和訂閱,構建高效、可靠的物聯網通信系統。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • MQTT
    +關注

    關注

    5

    文章

    733

    瀏覽量

    25070
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    IO數采終端支持MQTT通信嗎

    IO數采終端通常支持MQTT通信 ,尤其在物聯網和工業物聯網(IIoT)場景中,MQTT因其輕量級、低帶寬占用和發布/訂閱模式的優勢,成為IO數采終端數據傳輸的常用協議。以下是具體分析
    的頭像 發表于 12-09 14:31 ?484次閱讀
    IO數采終端支持<b class='flag-5'>MQTT</b>通信嗎

    Air780EPM嵌入式開發:LuatOS下的MQTT通信實踐

    Queuing Telemetry Transport,消息隊列遙測傳輸協議)是一種基于發布/訂閱模式的輕量級通信協議。你可以把它想象成一個郵局系統: 發布者(Publisher) :就像寄信的人,把
    的頭像 發表于 09-30 16:11 ?1823次閱讀
    Air780EPM嵌入式開發:LuatOS下的<b class='flag-5'>MQTT</b>通信實踐

    LuatOS嵌入式開發實戰:Air780EPM與MQTT通信

    (Message Queuing Telemetry Transport,消息隊列遙測傳輸協議)是一種基于發布/訂閱模式的輕量級通信協議。你可以把它想象成一個郵局系統: 發布者(Publisher) :就像
    的頭像 發表于 09-29 18:10 ?520次閱讀
    LuatOS嵌入式開發實戰:Air780EPM與<b class='flag-5'>MQTT</b>通信

    【HZ-RK3568開發板免費體驗】MQTT服務搭建與客戶端移植

    的權限類型,具有往Topic中發布消息的權限。 訂閱(Sub):操作Topic的權限類型,具有從Topic中訂閱消息的權限。 MQTT協議的主題和消息 Figure ?
    發表于 08-30 21:05

    物聯網MQTT網關是什么

    ,適用于智能家居、工業物聯網、環境監測等多個領域。 一、核心定義與定位 MQTT(Message Queuing Telemetry Transport)是一種基于發布/訂閱模式的輕量級通信協議,專為低帶寬、不穩定網絡環境設計,
    的頭像 發表于 08-29 15:24 ?1006次閱讀

    【創龍TL3562-MiniEVM開發板試用體驗】--MQTT通訊

    本篇講述開發板MQTT通訊。 MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基于發布訂閱(Publish/Subscr
    發表于 08-17 22:45

    【嘉楠堪智K230開發板試用體驗】CanMV K230 MQTT通信

    Topic的權限類型,具有往Topic中發布消息的權限。 訂閱(Sub):操作Topic的權限類型,具有從Topic中訂閱消息的權限。 MQTT協議的主題和消息 Figure 1?2
    發表于 08-16 23:39

    GraniStudio :MQTT 協議的深度剖析

    在工業物聯網(IIoT)的通信協議體系中,MQTT(Message Queuing Telemetry Transport)憑借其輕量級、發布 - 訂閱模式和低帶寬占用等特性,成為連接邊緣設備與云端
    的頭像 發表于 08-04 09:48 ?1024次閱讀
    GraniStudio :<b class='flag-5'>MQTT</b> 協議的深度剖析

    第二十三章 W55MH32 MQTT_OneNET示例

    本文講解了如何在 W55MH32?芯片上實現 MQTT?協議并連接 OneNET?平臺,通過實戰例程展示了從準備工作、連接配置到消息訂閱發布及接收處理的完整過程。文章詳細介紹了
    的頭像 發表于 07-24 14:59 ?1041次閱讀
    第二十三章 W55MH32 <b class='flag-5'>MQTT</b>_OneNET示例

    第二十二章 W55MH32 MQTT&amp;Aliyun示例

    本文講解了如何在 W55MH32?芯片上實現 MQTT?協議并連接阿里云平臺,通過實戰例程展示了從準備工作、連接配置到消息訂閱發布及接收處理的完整過程。文章詳細介紹了
    的頭像 發表于 07-24 14:17 ?985次閱讀
    第二十二章 W55MH32 <b class='flag-5'>MQTT</b>&amp;Aliyun示例

    MQTT介紹

    的消息傳輸協議,近年來被廣泛應用于智能家居、工業控制、車聯網等場景。 MQTT 是一種基于發布/訂閱(Pub/Sub)模式的輕量級消息協議,設計初衷是為低帶寬、不穩定網絡環境下的設備通信而生。它更像是廣播電臺:你
    的頭像 發表于 07-14 09:34 ?3683次閱讀
    <b class='flag-5'>MQTT</b>介紹

    KaihongOS操作系統:MQTT物聯網通訊協議

    ): void 訂閱mqtt發布消息事件。使用callback方式作為異步方法。 系統能力:SystemCapability.Communication.khNetStack 參數: 參數名類型必填
    發表于 05-08 07:51

    KaihongOS多實例MQTT接口

    : Callback<{messageId: number}>): ResponseCode; 訂閱mqtt發布消息事件。 系統能力
    發表于 05-08 06:58

    《DNESP32S3使用指南-IDF版_V1.6》第五十五章 基于MQTT協議連接阿里云服務器

    下載驗證 55.1MQTT協議簡介(1)MQTT是什么?MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基于發布/
    發表于 03-18 09:22

    MQTT物聯網平臺有哪些?有哪些功能?

    MQTT(Message Queuing Telemetry Transport)是一種基于客戶端-服務器架構的發布/訂閱模式的消息傳輸協議,它廣泛應用于機器與機器的通信(M2M)以及物聯網環境
    的頭像 發表于 03-15 14:23 ?1455次閱讀
    <b class='flag-5'>MQTT</b>物聯網平臺有哪些?有哪些功能?