在物聯(lián)網(wǎng)應(yīng)用中,為何選擇MQTT而不是HTTP?
當(dāng)我們深入探討物聯(lián)網(wǎng)(IoT)的應(yīng)用時(shí),會(huì)發(fā)現(xiàn)通信協(xié)議的選擇至關(guān)重要。其中,MQTT和HTTP這兩種協(xié)議常被提及。那么,為何在物聯(lián)網(wǎng)應(yīng)用中更傾向于使用MQTT而不是HTTP呢?愛陸通幫助您從MQTT的架構(gòu)和特點(diǎn)入手,一探究竟。
MQTT架構(gòu)
MQTT架構(gòu)有兩種角色:MQTT Broker(MQTT服務(wù)器)和MQTT Clients(發(fā)布者和訂閱者)。MQTT Clients之間通過話題進(jìn)行通信。MQTT Clients發(fā)布消息時(shí),只能向指定話題發(fā)布消息,這時(shí)候它扮演發(fā)布者的角色。要接收消息,MQTT Clients必須先訂閱相關(guān)話題,才能接收到該話題的發(fā)布消息(帖子)。話題的發(fā)布和訂閱關(guān)系由MQTT服務(wù)器管理,根據(jù)消息的話題和訂閱關(guān)系將消息轉(zhuǎn)發(fā)給訂閱者,實(shí)現(xiàn)通信。MQTT服務(wù)器的IP地址是固定的,可以認(rèn)為發(fā)布者不知道誰(shuí)會(huì)收聽它的消息,發(fā)布者和訂閱者彼此不知道對(duì)方的存在,他們不直接建立通信鏈路。因此,所有消息都是通過服務(wù)器基于話題進(jìn)行轉(zhuǎn)發(fā)。這種網(wǎng)絡(luò)結(jié)構(gòu)非常便捷,MQTT Clients隨時(shí)隨地都可以加入,只需知道服務(wù)器的IP地址。由于傳感器通常是用于采集和傳輸數(shù)據(jù),并偶爾接收命令和配置等操作。
更簡(jiǎn)單解釋一下為什么物聯(lián)網(wǎng)廣泛使用MQTT協(xié)議而不是HTTP協(xié)議
首先,MQTT協(xié)議的報(bào)文非常簡(jiǎn)短,比HTTP協(xié)議的報(bào)文要短得多。除去傳輸數(shù)據(jù)本身的負(fù)載部分,MQTT協(xié)議的報(bào)文只有幾個(gè)字節(jié)。你可能會(huì)問,報(bào)文占用字節(jié)少有什么實(shí)際好處呢?如果你的系統(tǒng)只連接了幾個(gè)傳感器(比如溫度和濕度傳感器),那么使用任何協(xié)議都差別不大。但是假設(shè)你的設(shè)備數(shù)量是成千上萬臺(tái)呢?每臺(tái)設(shè)備每秒傳輸一次數(shù)據(jù),那么累積節(jié)省的字節(jié)數(shù)就會(huì)非常可觀。你還可能問,節(jié)省的字節(jié)數(shù)會(huì)帶來什么好處呢?每次數(shù)據(jù)傳輸都需要占用網(wǎng)絡(luò)帶寬,所以節(jié)省下來的字節(jié)可以直接降低你的帶寬使用量。如果你的系統(tǒng)部署在阿里云等按流量計(jì)費(fèi)的云服務(wù)器上,這就相當(dāng)于直接節(jié)省了你的費(fèi)用。此外,簡(jiǎn)短的報(bào)文在資源受限的嵌入式設(shè)備上能夠降低資源的占用,協(xié)議解析過程中不需要消耗太多的CPU和內(nèi)存資源。雖然現(xiàn)在的設(shè)備都有過剩的資源,但我們?nèi)匀粦?yīng)該追求極致的性能。
其次,MQTT協(xié)議采用了發(fā)布-訂閱模型。簡(jiǎn)單來說,發(fā)布-訂閱模型允許多個(gè)接收端接收一條信息。想象一下以下場(chǎng)景:在家里有一個(gè)燈泡、一個(gè)紅外傳感器和一臺(tái)普通攝像頭,讓你實(shí)現(xiàn)以下應(yīng)用。
當(dāng)紅外傳感器檢測(cè)到有人闖入時(shí),我們需要同時(shí)觸發(fā)攝像頭抓拍畫面并打開燈。如果使用HTTP協(xié)議,我們需要啟動(dòng)一個(gè)HTTP服務(wù)器并將相關(guān)的代碼邏輯(開燈和攝像頭抓拍)寫入相應(yīng)的API中。實(shí)現(xiàn)邏輯可能會(huì)變得有些復(fù)雜。假設(shè)需求變化,不僅需要攝像頭抓拍和開燈,還需要觸發(fā)家里的蜂鳴器發(fā)出聲音警報(bào)。這又需要修改一番代碼…然而,如果我們基于MQTT發(fā)布訂閱模型,燈泡、攝像頭、蜂鳴器等設(shè)備只需要訂閱相應(yīng)的主題,它們會(huì)在第一時(shí)間同時(shí)接收到信息并執(zhí)行對(duì)應(yīng)的操作。即使在以后增加功能的情況下,擴(kuò)展也會(huì)變得非常容易。
總結(jié):MQTT的亮點(diǎn)在于數(shù)據(jù)報(bào)文簡(jiǎn)短且發(fā)布訂閱模型的使用。