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

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

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

物聯(lián)網(wǎng)協(xié)議MQTT協(xié)議的實(shí)現(xiàn)

汽車玩家 ? 來(lái)源:IT知識(shí)課堂 ? 作者:IT知識(shí)課堂 ? 2020-05-05 23:07 ? 次閱讀

概述

MQTT是IBM開(kāi)發(fā)的一個(gè)即時(shí)通訊協(xié)議,有可能成為物聯(lián)網(wǎng)的重要組成部分。該協(xié)議支持所有平臺(tái),幾乎可以把所有聯(lián)網(wǎng)物品和外部連接起來(lái),被用來(lái)當(dāng)做傳感器和制動(dòng)器之間通信的橋梁。

MQTT協(xié)議是為大量計(jì)算能力有限,且工作在低帶寬、不可靠的網(wǎng)絡(luò)的遠(yuǎn)程傳感器和控制設(shè)備通訊而設(shè)計(jì)的協(xié)議。有以下特點(diǎn):

使用發(fā)布/訂閱消息模式,提供一對(duì)多的消息發(fā)布

使用TCP/IP提供網(wǎng)絡(luò)連接

小型傳輸,開(kāi)銷很?。ü潭ㄩL(zhǎng)度的頭部是 2 字節(jié)),協(xié)議交換最小化,以降低網(wǎng)絡(luò)流量,傳輸?shù)膬?nèi)容最大為256MB。

使用 Last Will 和 Testament 特性通知有關(guān)各方客戶端異常中斷的機(jī)制。

1.MQTT協(xié)議實(shí)現(xiàn)方式

MQTT系統(tǒng)由與服務(wù)器通信的客戶端組成,通常稱服務(wù)器為“代理Broker”??蛻艨梢允?a target="_blank">信息發(fā)布者Publish或訂閱者Subscribe。每個(gè)客戶端都可以連接到代理。

信息按主題層次結(jié)構(gòu)組織。當(dāng)發(fā)布者具有要分發(fā)的新數(shù)據(jù)時(shí),它會(huì)將包含數(shù)據(jù)的控制消息發(fā)送到連接的代理。然后,代理將信息分發(fā)給已訂閱該主題的任何客戶端。發(fā)布者不需要有關(guān)于訂閱者數(shù)量或位置的任何數(shù)據(jù),而訂閱者又不必配置有關(guān)發(fā)布者的任何數(shù)據(jù)。

MQTT傳輸?shù)南⒎譃椋褐黝}(Topic)和負(fù)載(payload)兩部分: (1)Topic,可以理解為消息的類型,訂閱者訂閱(Subscribe)后,就會(huì)收到該主題的消息內(nèi)容(payload); (2)payload,可以理解為消息的內(nèi)容,是指訂閱者具體要使用的內(nèi)容。

2. MQTT協(xié)議中的訂閱、主題、會(huì)話

2.1訂閱(Subscription)

訂閱包含主題篩選器(Topic Filter)和最大服務(wù)質(zhì)量(QoS)。訂閱會(huì)與一個(gè)會(huì)話(Session)關(guān)聯(lián)。一個(gè)會(huì)話可以包含多個(gè)訂閱。每一個(gè)會(huì)話中的每個(gè)訂閱都有一個(gè)不同的主題篩選器。

2.2會(huì)話(Session)

每個(gè)客戶端與服務(wù)器建立連接后就是一個(gè)會(huì)話,客戶端和服務(wù)器之間有狀態(tài)交互。會(huì)話存在于一個(gè)網(wǎng)絡(luò)之間,也可能在客戶端和服務(wù)器之間跨越多個(gè)連續(xù)的網(wǎng)絡(luò)連接。

2.3主題名(Topic Name)

連接到一個(gè)應(yīng)用程序消息的標(biāo)簽,該標(biāo)簽與服務(wù)器的訂閱相匹配。服務(wù)器會(huì)將消息發(fā)送給訂閱所匹配標(biāo)簽的每個(gè)客戶端。 系統(tǒng)主題:通過(guò)定義$SYS開(kāi)頭的主題可以查看一些系統(tǒng)信息,如客戶端連接數(shù)量等, 詳細(xì)介紹:https://github.com/mqtt/mqtt.github.io/wiki/SYS-Topics

2.4主題篩選器(Topic Filter)

一個(gè)對(duì)主題名通配符篩選器,在訂閱表達(dá)式中使用,表示訂閱所匹配到的多個(gè)主題。 多級(jí)匹配符 # 單級(jí)匹配符 + 更多主題討論,請(qǐng)移步github wiki https://github.com/mqtt/mqtt.github.io/wiki/topic_format

2.5負(fù)載(Payload)

消息訂閱者所具體接收的內(nèi)容。

3.保留消息和最后遺囑

保留消息 Retained Messages

MQTT中,無(wú)論是發(fā)布還是訂閱都不會(huì)有任何觸發(fā)事件。 1個(gè)Topic只有唯一的retain消息,Broker會(huì)保存每個(gè)Topic的最后一條retain消息。 發(fā)布消息時(shí)把retain設(shè)置為true,即為保留信息。每個(gè)Client訂閱Topic后會(huì)立即讀取到retain消息。如果需要?jiǎng)h除retain消息,可以發(fā)布一個(gè)空的retain消息,因?yàn)槊總€(gè)新的retain消息都會(huì)覆蓋最后一個(gè)retain消息。

最后遺囑 Last Will & Testament

MQTT本身就是為信號(hào)不穩(wěn)定的網(wǎng)絡(luò)設(shè)計(jì)的,所以難免一些客戶端會(huì)無(wú)故的和Broker斷開(kāi)連接。 當(dāng)客戶端連接到Broker時(shí),可以指定LWT,Broker會(huì)定期檢測(cè)客戶端是否有異常。 當(dāng)客戶端異常掉線時(shí),Broker就往連接時(shí)指定的topic里推送當(dāng)時(shí)指定的LWT消息。

4.消息服務(wù)質(zhì)量

有三種消息發(fā)布服務(wù)質(zhì)量qos(Quality of Service):

4.1“至多一次”

物聯(lián)網(wǎng)協(xié)議MQTT協(xié)議的實(shí)現(xiàn)

至多一次

消息發(fā)布完全依賴底層TCP/IP網(wǎng)絡(luò)。會(huì)發(fā)生消息丟失或重復(fù)。這一級(jí)別可用于如下情況,環(huán)境傳感器數(shù)據(jù),丟失一次讀記錄無(wú)所謂,因?yàn)椴痪煤筮€會(huì)有第二次發(fā)送。

4.2“至少一次”

物聯(lián)網(wǎng)協(xié)議MQTT協(xié)議的實(shí)現(xiàn)

至少一次

PUBACK消息是對(duì)QoS級(jí)別為1的PUBLISH消息的響應(yīng).PUBACK消息由服務(wù)器發(fā)送以響應(yīng)來(lái)自發(fā)布端的PUBLISH消息,訂閱端也會(huì)響應(yīng)來(lái)自服務(wù)器的PUBLISH消息。當(dāng)發(fā)布端收到PUBACK消息時(shí),它會(huì)丟棄原始消息,因?yàn)樗脖环?wù)器接收(并記錄)。

如果一定時(shí)間內(nèi),發(fā)布端或服務(wù)器沒(méi)有收到PUBACK消息,則會(huì)進(jìn)行重發(fā)。這種方式雖然確保了消息到達(dá),但消息重復(fù)可能會(huì)發(fā)生。

4.3“只有一次”

物聯(lián)網(wǎng)協(xié)議MQTT協(xié)議的實(shí)現(xiàn)

只有一次

PUBREC消息是對(duì)QoS級(jí)別為2的PUBLISH消息的響應(yīng)。它是QoS級(jí)別2協(xié)議流的第二個(gè)消息。 PUBREC消息由服務(wù)器響應(yīng)來(lái)自發(fā)布端的PUBLISH消息,或訂閱端響應(yīng)來(lái)自服務(wù)器的PUBLISH消息。發(fā)布端或服務(wù)器收到PUBREC消息時(shí),會(huì)響應(yīng)PUBREL消息。

PUBREL消息是從發(fā)布端對(duì)PUBREC的響應(yīng),或從服務(wù)器對(duì)訂閱端PUBREC消息的響應(yīng)。 這是QoS 2協(xié)議流中第三個(gè)消息。當(dāng)服務(wù)器從發(fā)布者收到PUBREL消息時(shí),服務(wù)器會(huì)將PUBLISH消息發(fā)送到訂閱端,并發(fā)送PUBCOMP消息到發(fā)布端。 當(dāng)訂閱端收到來(lái)自服務(wù)器的消息PUBREL時(shí),使得消息可用于應(yīng)用程序并將PUBCOMP消息發(fā)送到服務(wù)器。

PUBCOMP消息是服務(wù)器對(duì)來(lái)自發(fā)布端的PUBREL消息的響應(yīng),或訂閱者對(duì)來(lái)自服務(wù)器的PUBREL消息的響應(yīng)。 它是QoS 2協(xié)議流程中的第四個(gè)也是最后一個(gè)消息。當(dāng)發(fā)布端收到PUBCOMP消息時(shí),它會(huì)丟棄原始消息,因?yàn)樗呀?jīng)將消息發(fā)給了服務(wù)器。

在一些要求比較嚴(yán)格的計(jì)費(fèi)系統(tǒng)中,可以使用此級(jí)別。在計(jì)費(fèi)系統(tǒng)中,消息重復(fù)或丟失會(huì)導(dǎo)致不正確的結(jié)果。這種最高質(zhì)量的消息發(fā)布服務(wù)還可以用于即時(shí)通訊類的APP的推送,確保用戶收到且只會(huì)收到一次。

聲明:本文內(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)投訴
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2894

    文章

    43313

    瀏覽量

    366443
  • MQTT
    +關(guān)注

    關(guān)注

    5

    文章

    629

    瀏覽量

    22286
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    聯(lián)網(wǎng)行業(yè)中MQTT通信協(xié)議詳解以及使用

    聯(lián)網(wǎng)、小型設(shè)備、移動(dòng)應(yīng)用等方面有較廣泛的應(yīng)用。 二 MQTT協(xié)議特點(diǎn) MQTT是一個(gè)基于 客戶端-服務(wù)器 的消息發(fā)布/訂閱傳輸
    的頭像 發(fā)表于 09-20 17:08 ?100次閱讀
    <b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>行業(yè)中<b class='flag-5'>MQTT</b>通信<b class='flag-5'>協(xié)議</b>詳解以及使用

    MQTT協(xié)議網(wǎng)關(guān)的工作原理及功能特性

    聯(lián)網(wǎng)的快速發(fā)展中,MQTT協(xié)議網(wǎng)關(guān)作為連接物聯(lián)網(wǎng)設(shè)備與消息代理服務(wù)器的重要橋梁,扮演著不可或缺的角色。
    的頭像 發(fā)表于 09-18 17:00 ?120次閱讀
    <b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>網(wǎng)關(guān)的工作原理及功能特性

    鋇錸協(xié)議網(wǎng)關(guān)輕松實(shí)現(xiàn)Modbus轉(zhuǎn)MQTT協(xié)議

    Modbus是一種在工業(yè)自動(dòng)化領(lǐng)域廣泛使用的通信協(xié)議,以其簡(jiǎn)單性和可靠性而著稱。然而,隨著聯(lián)網(wǎng)技術(shù)的興起,傳統(tǒng)的Modbus協(xié)議需要與通信協(xié)議
    的頭像 發(fā)表于 07-23 15:51 ?209次閱讀
    鋇錸<b class='flag-5'>協(xié)議</b>網(wǎng)關(guān)輕松<b class='flag-5'>實(shí)現(xiàn)</b>Modbus轉(zhuǎn)<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>

    MQTT聯(lián)網(wǎng)平臺(tái)是什么

    。這種平臺(tái)允許設(shè)備通過(guò)MQTT協(xié)議與其他設(shè)備及云端服務(wù)進(jìn)行通信,實(shí)現(xiàn)數(shù)據(jù)的上傳和下載,從而支持各種聯(lián)網(wǎng)應(yīng)用和服務(wù)。
    的頭像 發(fā)表于 07-18 14:22 ?314次閱讀

    MQTT聯(lián)網(wǎng)平臺(tái)是什么?MQTT聯(lián)網(wǎng)平臺(tái)的功能

    ,易于實(shí)現(xiàn),因此廣泛應(yīng)用于受限的環(huán)境,如機(jī)器與機(jī)器的通信(M2M)以及物聯(lián)網(wǎng)環(huán)境(IoT)。 MQTT聯(lián)網(wǎng)平臺(tái)通過(guò)提供一種標(biāo)準(zhǔn)化的
    的頭像 發(fā)表于 04-01 10:20 ?542次閱讀

    mqtt協(xié)議和tcp協(xié)議區(qū)別

    帶寬和高延遲的網(wǎng)絡(luò)環(huán)境,尤其在聯(lián)網(wǎng)環(huán)境中表現(xiàn)優(yōu)秀。而TCP協(xié)議是面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,主要用于互聯(lián)網(wǎng)和局域網(wǎng)中的
    的頭像 發(fā)表于 04-01 09:15 ?1369次閱讀

    MQTT和Modbus的聯(lián)網(wǎng)網(wǎng)關(guān)協(xié)議的區(qū)別分析

    MQTT和Modbus的聯(lián)網(wǎng)網(wǎng)關(guān)協(xié)議區(qū)別分析 MQTT(Message Queuing Telemetry Transport)與Modbus是兩種廣泛應(yīng)用在
    的頭像 發(fā)表于 03-18 16:50 ?609次閱讀
    <b class='flag-5'>MQTT</b>和Modbus的<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)網(wǎng)關(guān)協(xié)議</b>的區(qū)別分析

    MQTT協(xié)議網(wǎng)關(guān)解決方案設(shè)計(jì)與實(shí)施

    的主要功能包括協(xié)議轉(zhuǎn)換、消息過(guò)濾、安全認(rèn)證、負(fù)載均衡等,以確保消息的可靠傳輸和系統(tǒng)的穩(wěn)定運(yùn)行。隨著聯(lián)網(wǎng)技術(shù)的快速發(fā)展,MQTT協(xié)議作為一種
    的頭像 發(fā)表于 03-11 14:07 ?367次閱讀

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

    ,易于實(shí)現(xiàn),因此廣泛應(yīng)用于受限的環(huán)境,如機(jī)器與機(jī)器的通信(M2M)以及物聯(lián)網(wǎng)環(huán)境(IoT)。 MQTT聯(lián)網(wǎng)平臺(tái)通過(guò)提供一種標(biāo)準(zhǔn)化的
    的頭像 發(fā)表于 01-24 09:23 ?940次閱讀

    MQTT和Modbus協(xié)議的區(qū)別

    兩種聯(lián)網(wǎng)補(bǔ)充協(xié)議:用于短距離設(shè)備連接的本地協(xié)議 Modbus 以及支持聯(lián)網(wǎng)進(jìn)行全局通信的可擴(kuò)
    的頭像 發(fā)表于 12-08 15:21 ?1962次閱讀
    <b class='flag-5'>MQTT</b>和Modbus<b class='flag-5'>協(xié)議</b>的區(qū)別

    聯(lián)網(wǎng)中的MQTT協(xié)議概述

    MQTT協(xié)議已經(jīng)成了聯(lián)網(wǎng)通信中的一個(gè)熱詞,今天我們一起來(lái)學(xué)習(xí)一下關(guān)于MQTT協(xié)議的一些知識(shí)。
    的頭像 發(fā)表于 11-25 14:09 ?1162次閱讀

    工業(yè)智能網(wǎng)關(guān)實(shí)現(xiàn)MQTT協(xié)議聯(lián)網(wǎng)平臺(tái)的數(shù)據(jù)通信

    隨著工業(yè)聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,越來(lái)越多的設(shè)備和系統(tǒng)需要實(shí)現(xiàn)數(shù)據(jù)共享。MQTT是一種基于發(fā)布/訂閱模式的輕量級(jí)消息傳輸協(xié)議,在
    的頭像 發(fā)表于 11-17 13:38 ?439次閱讀
    工業(yè)智能網(wǎng)關(guān)<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>與<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>平臺(tái)的數(shù)據(jù)通信

    如何實(shí)現(xiàn)MQTT協(xié)議數(shù)據(jù)傳輸?

    如何實(shí)現(xiàn)MQTT協(xié)議數(shù)據(jù)傳輸? 隨著聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,越來(lái)越多的設(shè)備和應(yīng)用需要實(shí)現(xiàn)互聯(lián)互通。
    的頭像 發(fā)表于 11-15 17:23 ?1002次閱讀

    如何采用mqtt協(xié)議實(shí)現(xiàn)聯(lián)網(wǎng)模塊消息推送?

    如何采用mqtt協(xié)議實(shí)現(xiàn)聯(lián)網(wǎng)模塊消息推送
    發(fā)表于 11-03 06:55

    移動(dòng)nb—mqtt協(xié)議介紹

    MQTT是客戶端-服務(wù)器發(fā)布/訂閱消息傳輸協(xié)議。它重量輕,開(kāi)放,簡(jiǎn)單并且被設(shè)計(jì)為易于實(shí)現(xiàn)。這些特性使其非常適合使用 在許多情況下,包括受約束的環(huán)境,例如在Machine中進(jìn)行通信需要小代碼占用的機(jī)器
    發(fā)表于 09-26 07:44