chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在MQTT中發(fā)布和訂閱實(shí)體

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

掃碼添加小助手

加入工程師交流群

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

一、MQTT發(fā)布與訂閱的基本概念

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

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

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

二、發(fā)布和訂閱的步驟

(一)建立MQTT連接

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

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

客戶端ID:用于唯一標(biāo)識(shí)客戶端。

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

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

(二)訂閱主題

客戶端通過(guò)訂閱特定主題來(lái)接收相關(guān)消息。訂閱操作可以指定QoS等級(jí),代理會(huì)按照該等級(jí)向訂閱者推送消息。

(三)發(fā)布消息

客戶端將消息發(fā)布到指定的主題。發(fā)布時(shí)需要指定主題名稱、消息內(nèi)容和QoS等級(jí)。

(四)消息接收與處理

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

(五)斷開(kāi)連接

當(dāng)客戶端不再需要通信時(shí),可以斷開(kāi)與MQTT代理的連接。

三、代碼示例

以下是使用Python的paho-mqtt庫(kù)實(shí)現(xiàn)MQTT發(fā)布和訂閱的示例代碼:

(一)訂閱者代碼

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

(二)發(fā)布者代碼

pythonimport paho.mqtt.client as mqttimport time # 創(chuàng)建MQTT客戶端實(shí)例client = mqtt.Client() # 連接到MQTT代理client.connect("broker.hivemq.com", 1883, 60) # 發(fā)布消息的函數(shù)def publish_message(topic, payload, qos=0): result = client.publish(topic, payload, qos) # result是一個(gè)元組,包含消息ID和中間隊(duì)列對(duì)象 status = result[0] if status == 0: print(f"Message '{payload}' published to topic '{topic}'") else: print(f"Failed to publish message to topic '{topic}'") # 發(fā)布多條消息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等級(jí)1發(fā)布消息 time.sleep(1) # 等待1秒,模擬不同時(shí)間點(diǎn)的發(fā)布 # 斷開(kāi)連接client.disconnect()

四、關(guān)鍵點(diǎn)說(shuō)明

主題設(shè)計(jì)

層次結(jié)構(gòu):使用斜杠(/)分隔主題的各個(gè)層級(jí),例如"home/livingroom/temperature"。這種層次結(jié)構(gòu)便于對(duì)消息進(jìn)行分類(lèi)和管理。

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

QoS等級(jí)選擇

QoS 0:最多一次。消息發(fā)送后不等待確認(rèn),可能會(huì)丟失,適用于對(duì)消息可靠性要求不高的場(chǎng)景,如實(shí)時(shí)性要求較高但允許少量數(shù)據(jù)丟失的環(huán)境監(jiān)測(cè)。

QoS 1:至少一次。消息發(fā)送后會(huì)等待確認(rèn),如果未收到確認(rèn)會(huì)重發(fā),可能會(huì)重復(fù)接收消息,適用于對(duì)消息可靠性有一定要求但允許少量重復(fù)的場(chǎng)景,如智能家居中的設(shè)備控制指令。

QoS 2:恰好一次。消息發(fā)送和接收會(huì)經(jīng)過(guò)多次握手確認(rèn),確保消息只被接收一次,但開(kāi)銷(xiāo)較大,適用于對(duì)消息可靠性要求極高的場(chǎng)景,如金融交易數(shù)據(jù)傳輸。

錯(cuò)誤處理

在實(shí)際應(yīng)用中,需要處理連接失敗、消息發(fā)布失敗等情況。例如,在連接代理時(shí),可以檢查返回的連接結(jié)果碼,如果連接失敗則進(jìn)行重試或報(bào)警。

通過(guò)以上步驟和示例代碼,你可以在MQTT中實(shí)現(xiàn)實(shí)體(主題)的發(fā)布和訂閱,構(gòu)建高效、可靠的物聯(lián)網(wǎng)通信系統(tǒng)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • MQTT
    +關(guān)注

    關(guān)注

    5

    文章

    708

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Air780EPM嵌入式開(kāi)發(fā):LuatOS下的MQTT通信實(shí)踐

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

    LuatOS嵌入式開(kāi)發(fā)實(shí)戰(zhàn):Air780EPM與MQTT通信

    (Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸協(xié)議)是一種基于發(fā)布/訂閱模式的輕量級(jí)通信協(xié)議。你可以把它想象成一個(gè)郵局系統(tǒng): 發(fā)布者(Publisher) :就像
    的頭像 發(fā)表于 09-29 18:10 ?156次閱讀
    LuatOS嵌入式開(kāi)發(fā)實(shí)戰(zhàn):Air780EPM與<b class='flag-5'>MQTT</b>通信

    【HZ-RK3568開(kāi)發(fā)板免費(fèi)體驗(yàn)】MQTT服務(wù)搭建與客戶端移植

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

    【創(chuàng)龍TL3562-MiniEVM開(kāi)發(fā)板試用體驗(yàn)】--MQTT通訊

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

    【嘉楠堪智K230開(kāi)發(fā)板試用體驗(yàn)】CanMV K230 MQTT通信

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

    第二十三章 W55MH32 MQTT_OneNET示例

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

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

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

    MQTT介紹

    的消息傳輸協(xié)議,近年來(lái)被廣泛應(yīng)用于智能家居、工業(yè)控制、車(chē)聯(lián)網(wǎng)等場(chǎng)景。 MQTT 是一種基于發(fā)布/訂閱(Pub/Sub)模式的輕量級(jí)消息協(xié)議,設(shè)計(jì)初衷是為低帶寬、不穩(wěn)定網(wǎng)絡(luò)環(huán)境下的設(shè)備通信而生。它更像是廣播電臺(tái):你
    的頭像 發(fā)表于 07-14 09:34 ?2873次閱讀
    <b class='flag-5'>MQTT</b>介紹

    KaihongOS操作系統(tǒng):MQTT物聯(lián)網(wǎng)通訊協(xié)議

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

    KaihongOS多實(shí)例MQTT接口

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

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

    下載驗(yàn)證 55.1MQTT協(xié)議簡(jiǎn)介(1)MQTT是什么?MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸協(xié)議),是一種基于發(fā)布/
    發(fā)表于 03-18 09:22

    MQTT物聯(lián)網(wǎng)平臺(tái)有哪些?有哪些功能?

    MQTT(Message Queuing Telemetry Transport)是一種基于客戶端-服務(wù)器架構(gòu)的發(fā)布/訂閱模式的消息傳輸協(xié)議,它廣泛應(yīng)用于機(jī)器與機(jī)器的通信(M2M)以及物聯(lián)網(wǎng)環(huán)境
    的頭像 發(fā)表于 03-15 14:23 ?1088次閱讀
    <b class='flag-5'>MQTT</b>物聯(lián)網(wǎng)平臺(tái)有哪些?有哪些功能?

    基于MQTT協(xié)議的車(chē)云通信設(shè)計(jì)

    Queuing Telemetry Transport)是由OASIS發(fā)布的應(yīng)用層協(xié)議,采用訂閱/發(fā)布的通信模式,下層基于TCP/IP進(jìn)行傳輸。該標(biāo)準(zhǔn)在工業(yè)物聯(lián)網(wǎng)、車(chē)聯(lián)網(wǎng)等領(lǐng)域有廣泛應(yīng)用。
    的頭像 發(fā)表于 01-08 10:24 ?1420次閱讀
    基于<b class='flag-5'>MQTT</b>協(xié)議的車(chē)云通信設(shè)計(jì)

    百問(wèn)MQTT協(xié)議分析 - MQTT簡(jiǎn)述及協(xié)議報(bào)文格式組成

    16.1 mqtt協(xié)議介紹 16.1.1 概述 ?MQTT是一個(gè)客戶端服務(wù)端架構(gòu)的發(fā)布/訂閱模式的消息傳輸協(xié)議。它的設(shè)計(jì)思想是輕巧、開(kāi)放、簡(jiǎn)單、規(guī)范,易于實(shí)現(xiàn)。這些特點(diǎn)使得它對(duì)很多場(chǎng)景
    發(fā)表于 12-13 09:29

    低功耗4G模組:MQTT通信功能

    適用于硬件性能低下的設(shè)備以及網(wǎng)絡(luò)狀況不佳的環(huán)境,因此在物聯(lián)網(wǎng)(IoT)小型設(shè)備和移動(dòng)應(yīng)用等方面有廣泛應(yīng)用。 MQTT采用發(fā)布/訂閱通信模型,客戶端可以發(fā)布消息到主題(Topic),也可
    的頭像 發(fā)表于 11-01 07:26 ?1433次閱讀