一文詳解MQTT協(xié)議
什么是 MQTT協(xié)議?
MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測傳輸)協(xié)議是一種基于發(fā)布/訂閱(publish/subscribe)模式的輕量級通訊協(xié)議,可以在各種規(guī)模的部署中連接多種類型的 IoT 設(shè)備,為連接遠(yuǎn)程設(shè)備提供實(shí)時(shí)數(shù)據(jù)傳輸。MQTT 協(xié)議構(gòu)建于 TCP/IP 協(xié)議上,由 IBM 公司在 1999 年發(fā)布,是一種在發(fā)布者-訂閱者通信模型上運(yùn)行的網(wǎng)絡(luò)協(xié)議。目前廣泛應(yīng)用于物聯(lián)網(wǎng)(IoT)領(lǐng)域。它足夠輕巧,可用于各種物聯(lián)網(wǎng)設(shè)備,但又足夠強(qiáng)大,可以在不穩(wěn)定的網(wǎng)絡(luò)條件下工作。
MQTT 協(xié)議的基本概念包括客戶端、服務(wù)端、主題(topic)、訂閱(subscription)和消息(message)等??蛻舳耸侵赴l(fā)布應(yīng)用消息給其他相關(guān)的客戶端,也可以訂閱以請求接受相關(guān)的應(yīng)用消息,還可以取消訂閱以移除接受應(yīng)用消息的請求。服務(wù)端是指接受來自客戶端的網(wǎng)絡(luò)連接,接受客戶端發(fā)布的應(yīng)用消息,處理客戶端的訂閱和取消訂閱請求,以及轉(zhuǎn)發(fā)應(yīng)用消息給符合條件的已訂閱客戶端。
MQTT 報(bào)文結(jié)構(gòu)包括固定報(bào)頭和可變報(bào)頭,其中固定報(bào)頭包含版本號、報(bào)文類型、保留字段、消息 ID 和序列號等字段,可變報(bào)頭包含主題、消息內(nèi)容、QoS(Quality of Service,服務(wù)質(zhì)量)和用戶名等字段。MQTT 報(bào)文類型包括 CONNECT、DISCONNECT、SUBSCRIBE、UNSUBSCRIBE、PUBLISH 和 PING 等,其中 CONNECT 報(bào)文用于客戶端與服務(wù)端建立連接,DISCONNECT 報(bào)文用于客戶端與服務(wù)端斷開連接,SUBSCRIBE 和 UNSUBSCRIBE 報(bào)文用于客戶端訂閱和取消訂閱主題,PUBLISH 報(bào)文用于客戶端發(fā)布消息,PING 報(bào)文用于測試客戶端與服務(wù)端之間的連接是否正常。
MQTT 協(xié)議的優(yōu)點(diǎn)在于簡單、輕量級、高效、可靠和安全。它采用發(fā)布/訂閱模式,實(shí)現(xiàn)了異步通信,降低了系統(tǒng)的復(fù)雜度和開銷。它使用 TCP/IP 協(xié)議,提供了可靠的數(shù)據(jù)傳輸和分布式系統(tǒng)架構(gòu),使得系統(tǒng)更加靈活、可擴(kuò)展和容錯(cuò)。此外,MQTT 協(xié)議還支持 QoS 機(jī)制,確保了消息的可靠傳遞和處理,同時(shí)還提供了安全的認(rèn)證和加密機(jī)制,保護(hù)了數(shù)據(jù)的隱私和安全。
在實(shí)際應(yīng)用中,MQTT 協(xié)議廣泛應(yīng)用于物聯(lián)網(wǎng)、智能家居、智能穿戴、智能交通、智能城市等領(lǐng)域。它可以將各種設(shè)備、傳感器和應(yīng)用程序連接起來,實(shí)現(xiàn)數(shù)據(jù)采集、傳輸、處理和分析,為各種應(yīng)用場景提供實(shí)時(shí)、高效、可靠的數(shù)據(jù)支持。
為什么在物聯(lián)網(wǎng)開發(fā)中使用MQTT協(xié)議?
由于其提供數(shù)據(jù)的節(jié)能方法,MQTT對于 CPU 功率或 RAM 有限的低功率設(shè)備很常見。
MQTT v5.0 本地網(wǎng)絡(luò)的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
1. 強(qiáng)可靠性:MQTT v5.0 在發(fā)布/訂閱模式基礎(chǔ)上,引入了更具彈性的傳輸機(jī)制,提高了消息傳輸?shù)目煽啃?。在?shù)據(jù)丟失、網(wǎng)絡(luò)不穩(wěn)定等異常情況下,MQTT v5.0 能夠自動重傳消息,確保消息不丟失。
2. 高效性:MQTT v5.0 采用了更高效的報(bào)文格式,減少了網(wǎng)絡(luò)傳輸?shù)拈_銷。此外,MQTT v5.0 還支持對消息進(jìn)行壓縮,進(jìn)一步降低了傳輸成本。
3. 易于使用:MQTT v5.0 協(xié)議簡單易用,客戶端開發(fā)者無需關(guān)注復(fù)雜的網(wǎng)絡(luò)協(xié)議細(xì)節(jié),即可實(shí)現(xiàn)消息的發(fā)布和訂閱。這大大降低了開發(fā)成本,提高了開發(fā)效率。
4. 靈活性:MQTT v5.0 支持多種傳輸協(xié)議,如 TCP、UDP、WebSocket 等,使得開發(fā)者可以根據(jù)不同的應(yīng)用場景和需求選擇合適的傳輸協(xié)議。
5. 安全性:MQTT v5.0 引入了更加完善的安全機(jī)制,支持使用 SSL/TLS 加密傳輸,保障了數(shù)據(jù)的安全性。此外,MQTT v5.0 還支持用戶名和密碼驗(yàn)證,避免了未經(jīng)授權(quán)的用戶訪問系統(tǒng)。
缺點(diǎn)
1. 復(fù)雜性:雖然 MQTT v5.0 協(xié)議本身相對簡單,但在實(shí)際應(yīng)用中,需要處理的問題卻很復(fù)雜。例如,處理網(wǎng)絡(luò)異常、重傳消息等都可能導(dǎo)致實(shí)現(xiàn)的復(fù)雜性。
2. 資源消耗:MQTT v5.0 雖然具有較高的傳輸效率,但在某些特殊場景下,如大規(guī)模物聯(lián)網(wǎng)系統(tǒng),可能會導(dǎo)致網(wǎng)絡(luò)資源和能源的過度消耗。
3. 客戶端實(shí)現(xiàn)難度:盡管 MQTT v5.0 協(xié)議簡單易用,但對于客戶端開發(fā)者而言,仍然需要花費(fèi)一定的時(shí)間學(xué)習(xí)和熟悉協(xié)議細(xì)節(jié)。
4. 兼容性問題:MQTT v5.0 相對于之前的版本,在報(bào)文格式、消息傳輸機(jī)制等方面都有很大的變化。因此,對于使用早期 MQTT 協(xié)議的客戶端和服務(wù)器,可能需要進(jìn)行相應(yīng)的升級和調(diào)整,以適應(yīng) MQTT v5.0。
MQTT v5.0挑戰(zhàn)
在單獨(dú)的裝置上,對消息進(jìn)行平行發(fā)送和監(jiān)聽的過程/線程管理。在制造過程中要特別注意。
可用的文檔有限,并且包(paho-mqtt)內(nèi)部類的實(shí)現(xiàn)過程并不明顯。
因?yàn)槿鄙傥募院茈y安裝或者更新到 MQTT v5.0。
要識別網(wǎng)絡(luò)中的設(shè)備,需要將 IP發(fā)現(xiàn)器添加到系統(tǒng)中。