中文乱码字幕在线中文乱码,中文无码制服丝袜人妻av,亚洲一区二区三区国产精华液,亚洲精品无码久久久久久,亚洲色成人网一二三区

mqtt協(xié)議詳解:了解mqtt協(xié)議這一篇就夠了

2021-12-10 13:58:33 admin 1021

什么是 MQTT?

MQTT作為一種工具,可以在各種規(guī)模的部署中連接多種類型的 IoT 設(shè)備。它最初始于 1999 年,用于石油和天然氣管道通過遠(yuǎn)程衛(wèi)星進(jìn)行通信。

MQTT 運(yùn)行在 TCP/IP 之上,是一種在發(fā)布者-訂閱者通信模型上運(yùn)行的網(wǎng)絡(luò)協(xié)議。它足夠輕巧,可用于各種物聯(lián)網(wǎng)設(shè)備,但又足夠強(qiáng)大,可以在不穩(wěn)定的網(wǎng)絡(luò)條件下工作。

為什么在物聯(lián)網(wǎng)開發(fā)中使用MQTT?

由于其提供數(shù)據(jù)的節(jié)能方法,MQTT對(duì)于 CPU 功率或 RAM 有限的低功率設(shè)備很常見。

MQTT 5.0 小型系統(tǒng)部署示例

讓我們看一個(gè)案例,我們需要使用基于 Python 的客戶端來組織本地MQTT v5.0網(wǎng)絡(luò)。我們將描述沿途的挑戰(zhàn)、問題和利弊。我們將通過將其與 MQTT v3.1.1 網(wǎng)絡(luò)進(jìn)行比較來得出結(jié)論。


數(shù)據(jù):圖像/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%200%200'%3E%3C/svg%3E


描述

我們有一棟樓,里面有幾個(gè)房間,里面有一個(gè)局域網(wǎng)(LAN)。一個(gè)房間包含三個(gè)獨(dú)立設(shè)備(例如,活動(dòng)獨(dú)立傳感器、照片相機(jī)傳感器或音頻傳感器)。

主機(jī)設(shè)備位于 LAN 內(nèi)部,并通過無線或電纜連接到路由器。它必須在一段時(shí)間內(nèi)從獨(dú)立設(shè)備提供數(shù)據(jù)收集(和處理)功能,并且必須將這些數(shù)據(jù)本地存儲(chǔ)在數(shù)據(jù)庫中。

對(duì)于當(dāng)前范圍,可以使用 SQLLite 數(shù)據(jù)庫或更簡(jiǎn)單的替代方案。只有在收到來自活動(dòng)傳感器的消息后,照片相機(jī)傳感器和音頻傳感器才必須激活。

目標(biāo)

確保主機(jī)設(shè)備和獨(dú)立設(shè)備之間的通信;并在主機(jī)端提供本地?cái)?shù)據(jù)庫部署和通信。

要求

  1. 從傳感器到主機(jī)設(shè)備的所有消息都必須受到 MQTT 5.0 附加屬性的約束(例如,傳輸?shù)街黝}的消息的字節(jié)大小)。

  2. 來自主題的消息必須包含 MIME 類型,以便在主機(jī)端進(jìn)行編碼。

  3. 消息必須存儲(chǔ)在本地的數(shù)據(jù)庫實(shí)例中。

符號(hào)

獨(dú)立設(shè)備:基于 x86 或 ARM(例如,Raspberry Pi),帶有連接的傳感器并可以訪問本地網(wǎng)絡(luò)。

主機(jī)設(shè)備:基于 x86 或 ARM 的(例如,Raspberry Pi)托管 MQTT 代理并處理來自獨(dú)立設(shè)備的消息。

哪些客戶端支持 MQTT 5.0 和 Python?

目前,我們有兩個(gè)選項(xiàng)可以使用:paho-MQTTgMQTT。但是,這些選項(xiàng)沒有內(nèi)置的 MQTT 5.0 代理,因此不適合本地部署網(wǎng)絡(luò)。有一個(gè)名為 Mosquitto 的代理的非 Python 實(shí)現(xiàn),它支持 MQTT 5.0。

文檔可以在這里找到。每個(gè)代理最多可支持 50 000 個(gè)設(shè)備。Mosquitto 有一個(gè)“飛行隊(duì)列”,可以配置大小(典型設(shè)置:1000 條消息),因此即使在高負(fù)載條件下,例如每秒數(shù)千條消息或數(shù)千個(gè)連接的客戶端,也不會(huì)丟失連接或消息。

基于 Python 的系統(tǒng)如何與 MQTT 5.0 配合使用

MQTT v5.0 協(xié)議的庫和文檔并不多,尤其是從 Python 開發(fā)人員的角度來看。當(dāng)前唯一適用于 Python 的 v5.0 客戶端是 gmqtt 和 paho-mqtt。

MQTT v5.0 本地網(wǎng)絡(luò)的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  1. 局域網(wǎng)內(nèi)完全自主的設(shè)備交互。不需要像 GCP 或 AWS 這樣的云提供商,也不需要本地物聯(lián)網(wǎng)系統(tǒng)運(yùn)行的 WAN 連接。

  2. 網(wǎng)絡(luò)延遲和數(shù)據(jù)傳輸速度。傳輸速度僅取決于本地設(shè)備的硬件能力。LAN 環(huán)境中的設(shè)備部署可實(shí)現(xiàn)最小延遲。

  3. 與競(jìng)爭(zhēng)對(duì)手相比,MQTT 的能源效率。

  4. 網(wǎng)絡(luò)安全。由于本地網(wǎng)絡(luò)未暴露于 WAN,因此本地網(wǎng)絡(luò)外部的實(shí)體無法捕獲或跟蹤帶有消息的數(shù)據(jù)包。MQTT v5.0 協(xié)議提供服務(wù)器對(duì)客戶端和客戶端對(duì)服務(wù)器的身份驗(yàn)證。MQTT 還可以使用 TLS 證書進(jìn)行安全連接和數(shù)據(jù)傳輸。

  5. 數(shù)據(jù)包限制可以應(yīng)用于網(wǎng)絡(luò)內(nèi)部的代理。

  6. 容器化。更簡(jiǎn)單的容器化使模擬和調(diào)試變得更加容易。

缺點(diǎn)

  1. 必須事先完成用于接收消息和并行工作的進(jìn)程和線程管理。處理消息的線程應(yīng)該被并行化和正確管理,以便您的設(shè)備正常運(yùn)行。

  2. 廣域網(wǎng)連接。開發(fā)人員必須定期調(diào)試和排除故障,并且必須首先組織主機(jī)和獨(dú)立設(shè)備之間的正確連接,通常使用安全的 SSH 連接。

  3. 不支持使用 MQTT 協(xié)議進(jìn)行流傳輸。如果您的組織需要,請(qǐng)查看其他協(xié)議。

  4. MQTT 上不可用的大文件傳輸??紤]存儲(chǔ)桶上傳或 HTTP 協(xié)議。

  5. 經(jīng)紀(jì)人無法智能地管理數(shù)據(jù)。但是,數(shù)據(jù)可以在斷開連接期間存儲(chǔ)有限的時(shí)間。

MQTT v3.1.1 和 v5.0 之間的主要實(shí)際差異

  • 用于存儲(chǔ)附加數(shù)據(jù)的屬性

  • 負(fù)載格式指示符(字節(jié)、UTF-8 或 UTF-8 字符串對(duì))

  • 請(qǐng)求/響應(yīng)模式

  • 客戶端連接和斷開的原因代碼

  • 會(huì)話過期和控制

升級(jí)后的協(xié)議版本允許簡(jiǎn)化數(shù)據(jù)負(fù)載處理和解析。它帶來了對(duì)消息、連接和會(huì)話進(jìn)行分離和精確控制的能力。它允許通過屬性傳輸額外的數(shù)據(jù),這可能會(huì)導(dǎo)致創(chuàng)建更復(fù)雜的物聯(lián)網(wǎng)解決方案。

MQTT 5 挑戰(zhàn)

  • 用于在獨(dú)立設(shè)備上并行發(fā)布和偵聽消息的進(jìn)程/線程管理。在生產(chǎn)環(huán)境中需要注意。

  • 可用的文檔有限,并且包(paho-mqtt)內(nèi)部類的實(shí)現(xiàn)過程并不明顯。

  • 由于缺乏文檔,代理的安裝和升級(jí)到 MQTT v5.0 很困難。

  • 要識(shí)別網(wǎng)絡(luò)中的設(shè)備,我們需要將 IP 發(fā)現(xiàn)器添加到系統(tǒng)中。

大改進(jìn)

如果您有一個(gè)中央設(shè)備可以托管消息代理以在設(shè)備和/或主機(jī)之間進(jìn)行通信,則 MQTT v5.0 是本地 IoT 設(shè)備通信的合適選項(xiàng)。盡管有其缺點(diǎn)(其中大部分在 MQTT v5.0 中已消除),但該協(xié)議可用于中小型物聯(lián)網(wǎng)設(shè)備網(wǎng)絡(luò)之間的通信


標(biāo)簽: MQTT
網(wǎng)站首頁
解決方案
產(chǎn)品中心
在線咨詢