上期文章中給大家介紹了MQTT規(guī)范版本5中基礎更改的信息和CONNACK返回碼,本篇文章我們繼續(xù)介紹MQTT5協(xié)議中的基礎更改中其他新功能的細節(jié)描述。
01 干凈啟動
MQTT 3.1.1的其中一個主流功能是MQTT客戶端使用清除會話(cleanSession),即這些客戶端可以通過臨時連接的方式訂閱消息或根本不訂閱消息。當連接到MQTT代理時,客戶端必須選擇發(fā)送一個標注啟用或禁用清除會話的CONNECT數(shù)據(jù)包。
在MQTT客戶端使用清除會話后,一旦出現(xiàn)底層TCP連接斷開、或客戶端決定斷開與代理的連接的情況,代理將會丟棄MQTT客戶端的所有數(shù)據(jù)。此外,如果在代理上存在與客戶端標識符關聯(lián)的先前會話,清除會話CONNECT數(shù)據(jù)包將強制MQTT代理刪除歷史數(shù)據(jù)。
在MQTT v5中,客戶端可以選擇使用干凈啟動(Clean Start)(由 CONNECT 消息中的“干凈啟動”標志指示)。使用這個標志時,代理會丟棄任何以前的會話數(shù)據(jù),客戶端則會開啟新的會話。關閉客戶端和服務器之間的 TCP 連接后,會話不會被自動清理。要在客戶端斷開連接后觸發(fā)會話刪除,必須將“會話到期間隔”的新頭字段設置為值 0。
新的Clean Start功能簡化了 MQTT 的會話處理,因為它提供了更大的靈活性,并且比 cleanSession/持久會話概念更易于實現(xiàn)。使用 MQTT 5,除非“會話到期間隔”為 0,否則所有會話都是持久的。在超時后或客戶端使用干凈啟動重新連接時,將刪除會話。
02 額外的MQTT數(shù)據(jù)包
MQTT 5引入了一個新的MQTT數(shù)據(jù)包:AUTH數(shù)據(jù)包。這個新的數(shù)據(jù)包對于實現(xiàn)非簡單的認證機制非常有用。
AUTH數(shù)據(jù)包可以在建立連接后由MQTT代理和客戶端發(fā)送,以使用復雜的質(zhì)詢/響應認證方法(如SASL框架中定義的SCRAM或Kerberos)。也可以用于物聯(lián)網(wǎng)的最先進的認證方法,如OAuth。這個數(shù)據(jù)包還允許在不關閉連接的情況下對MQTT客戶端進行重新認證。
03 新的數(shù)據(jù)類型: UTF-8字符串對
自定義報頭的出現(xiàn)也需要引入一種新的數(shù)據(jù)類型:UTF-8字符串對。這種字符串對本質(zhì)上是一個鍵-值結(jié)構(gòu),鍵和值都是字符串數(shù)據(jù)類型,這種數(shù)據(jù)類型目前只用于自定義報頭。
有了這種新的數(shù)據(jù)類型,MQTT在網(wǎng)絡上共有7種不同的數(shù)據(jù)類型可以使用:
Bit
Two Byte Integer
Four Byte Integer
UTF-8 Encoded String
Variable Byte Integer
Binary Data
UTF-8 String Pair
大多數(shù)用戶通常在其 MQTT 庫的 API 中使用二進制數(shù)據(jù)和 UTF-8 編碼字符串。在 MQTT 5 中,UTF-8 字符串對也經(jīng)常被使用。所有其他數(shù)據(jù)類型對用戶是隱藏的,但會被MQTT客戶端和代理制作成網(wǎng)絡上有效的MQTT數(shù)據(jù)包。
04 雙向的DISCONNECT數(shù)據(jù)包
在MQTT 3.1.1中,客戶端可以通過在關閉底層TCP連接之前,發(fā)送一個DISCONNECT數(shù)據(jù)包來表明它想斷開連接。MQTT代理沒有辦法通知MQTT客戶端發(fā)生了什么,并且代理將關閉TCP連接。
這一點在新的MQTT5中有所改變,現(xiàn)在允許代理在關閉套接字之前發(fā)送一個“MQTT DISCONNECT”包。客戶端現(xiàn)在能夠解釋它被斷開連接的原因并采取相應的行動,代理不需要指出確切的原因(例如出于安全原因)。但至少對于開發(fā)中的應用來說,這有助于找出代理關閉連接的原因。
當然,DISCONNECT數(shù)據(jù)包可以攜帶Reason Codes,所以很容易指出斷開連接的原因(例如在無效權(quán)限的情況下)。
05 對QoS 1和2的消息不進行重試
MQTT客戶端使用常設的TCP(或具有相同保證的類似協(xié)議)連接作為基礎傳輸。TCP連接正常時提供雙向連接,并且能保證消息符合恰好一次和按順序傳輸,因此所有客戶端或代理發(fā)送的MQTT數(shù)據(jù)包都會到達另一端。如果TCP連接中斷,而消息正在進行時,QoS 1和2會通過多個TCP 連接提供消息傳遞保證。
MQTT 3.1.1允許在TCP連接正常時重新交付MQTT消息。實際上,這可能會導致過載的MQTT客戶端得到更多的過載。試想一下,一個MQTT客戶端從MQTT代理處收到一個消息,需要11秒來處理這個消息(并且在處理后會確認數(shù)據(jù)包)。現(xiàn)在假設,代理會在10秒的超時后重新發(fā)送消息。這種方法沒有任何優(yōu)勢,它只是占用了帶寬,并加重了MQTT客戶端的負荷。
06 使用沒有用戶名的密碼
MQTT 3.1.1要求MQTT客戶端在CONNECT數(shù)據(jù)包中使用密碼時要發(fā)送一個用戶名。對于某些用例來說,如果沒有用戶名是非常不方便的。使用 OAuth就是一個很好的例子,它使用 JSON Web 令牌作為唯一的身份驗證和授權(quán)信息。在 MQTT 3.1.1 中使用此類令牌時,經(jīng)常使用靜態(tài)用戶名,因為唯一的相關信息在密碼字段中。
雖然MQTT 5 中有更簡便的方式來攜帶令牌(例如通過 AUTH 數(shù)據(jù)包),但仍然可以使用 CONNECT 數(shù)據(jù)包的密碼字段。現(xiàn)在,用戶只需使用密碼字段,不再需要填寫用戶名。
07 虹科HiveMQ MQTT解決方案
虹科HiveMQ 是一個基于 MQTT 數(shù)據(jù)傳輸?shù)?a href="http://www.zgszdi.cn/v/tag/1301/" target="_blank">通信平臺,旨在將數(shù)據(jù)快速、高效、可靠地傳遞給連接的物聯(lián)網(wǎng)設備,HiveMQ 使用 MQTT 協(xié)議在設備和企業(yè)平臺之間進行實時、雙向的數(shù)據(jù)推送。
虹科HiveMQ 的建立是為了解決企業(yè)在構(gòu)建新的物聯(lián)網(wǎng)應用時面臨的一些關鍵技術挑戰(zhàn),包括:
構(gòu)建可靠、可擴展的關鍵業(yè)務物聯(lián)網(wǎng)應用
快速的數(shù)據(jù)交付,以滿足終端用戶對響應式物聯(lián)網(wǎng)產(chǎn)品的期望
通過有效利用硬件、網(wǎng)絡和云資源降低運營成本
將物聯(lián)網(wǎng)數(shù)據(jù)整合到現(xiàn)有的企業(yè)系統(tǒng)中
虹科HiveMQ 提供免費版、專業(yè)版、企業(yè)版 MQTT Broker 產(chǎn)品,并提供 Kafka、企業(yè)安全及 MQTT Broker 橋接三種企業(yè)級擴展套件,HiveMQ 還提供高效的 MQTT 客戶端及云平臺,多方位滿足用戶需求。
更多精彩資訊 歡迎關注博主
審核編輯黃宇
-
物聯(lián)網(wǎng)
+關注
關注
2913文章
44923瀏覽量
377018 -
MQTT
+關注
關注
5文章
653瀏覽量
22692
發(fā)布評論請先 登錄
相關推薦
基于MQTT協(xié)議的車云通信設計
![基于<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>的車云通信設計](https://file1.elecfans.com/web3/M00/05/31/wKgZPGd94kWAcfymAAAR3x3J6xI567.jpg)
百問MQTT協(xié)議分析 - MQTT簡述及協(xié)議報文格式組成
MQTT-3.1.1標準協(xié)議文檔
MQTT.fx 連接Onenet 多協(xié)議接入平臺 MQTT協(xié)議(舊版)詳解
![<b class='flag-5'>MQTT</b>.fx 連接Onenet 多<b class='flag-5'>協(xié)議</b>接入平臺 <b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>(舊版)詳解](https://file1.elecfans.com//web2/M00/08/BF/wKgZomb6UR6AY2ePAAE0cbj8leM307.jpg)
物聯(lián)網(wǎng)行業(yè)中MQTT通信協(xié)議詳解以及使用
![物聯(lián)網(wǎng)行業(yè)<b class='flag-5'>中</b><b class='flag-5'>MQTT</b>通信<b class='flag-5'>協(xié)議</b>詳解以及使用](https://file1.elecfans.com//web2/M00/07/21/wKgZombtO6KARHDwAACjTo72E04008.jpg)
MQTT協(xié)議網(wǎng)關的工作原理及功能特性
![<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>網(wǎng)關的工作原理及功能特性](https://file1.elecfans.com//web2/M00/07/B1/wKgaombqlp6ARrPnAADgy2-cZI8853.jpg)
MQTT網(wǎng)關:物聯(lián)網(wǎng)中的關鍵橋梁
![<b class='flag-5'>MQTT</b>網(wǎng)關:物聯(lián)網(wǎng)<b class='flag-5'>中</b>的關鍵橋梁](https://file1.elecfans.com//web2/M00/04/B3/wKgaombG15aAcAnfAAEFTeFZDvg122.jpg)
鋇錸技術Modbus轉(zhuǎn)MQTT網(wǎng)關:橋接Modbus協(xié)議與MQTT協(xié)議
![鋇錸技術Modbus轉(zhuǎn)<b class='flag-5'>MQTT</b>網(wǎng)關:橋接Modbus<b class='flag-5'>協(xié)議</b>與<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>](https://file1.elecfans.com/web2/M00/00/50/wKgaomaoovKAU7d4AASPlzrTdN0275.png)
基于MQTT協(xié)議云平臺的Modbus轉(zhuǎn)MQTT網(wǎng)關
![基于<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>云平臺的Modbus轉(zhuǎn)<b class='flag-5'>MQTT</b>網(wǎng)關](https://file1.elecfans.com/web2/M00/00/11/wKgaomanYQ6ARFCfAAAaWpcP9_Y947.png)
鋇錸協(xié)議網(wǎng)關輕松實現(xiàn)Modbus轉(zhuǎn)MQTT協(xié)議
![鋇錸<b class='flag-5'>協(xié)議</b>網(wǎng)關輕松實現(xiàn)Modbus轉(zhuǎn)<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>](https://file1.elecfans.com/web2/M00/FB/53/wKgZomaQpE2ABnbqAAAPbeO5m9E490.png)
你了解清楚了嘛-TCP、HTTP、MQTT協(xié)議
![你了解清楚了嘛-TCP、HTTP、<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>](https://file1.elecfans.com/web2/M00/FB/36/wKgaomaM8TaAQTxWAACIZqMj3-A546.png)
mqtt協(xié)議和tcp協(xié)議區(qū)別
MQTT和Modbus的物聯(lián)網(wǎng)網(wǎng)關協(xié)議的區(qū)別分析
![<b class='flag-5'>MQTT</b>和Modbus的物聯(lián)網(wǎng)網(wǎng)關<b class='flag-5'>協(xié)議</b>的區(qū)別分析](https://file1.elecfans.com/web2/M00/C4/D2/wKgZomX4AFKASRhwAAjPIFFEmT8549.png)
MQTT協(xié)議網(wǎng)關解決方案設計與實施
什么是MQTT?MQTT協(xié)議中的方法
![什么是<b class='flag-5'>MQTT</b>?<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>中</b>的方法](https://file1.elecfans.com/web2/M00/C0/EB/wKgZomXbAtaAUo0rAAE7QsakqBs263.png)
評論