MQTT協(xié)議,在物聯(lián)網(wǎng)中有廣泛應(yīng)用,是對傳統(tǒng)互聯(lián)網(wǎng)的擴(kuò)展和擴(kuò)展。用戶終端從傳統(tǒng)計(jì)算機(jī)擴(kuò)展到任何設(shè)備,通過各種傳感器收集信息,再通過計(jì)算設(shè)備收集信息、交換和交流網(wǎng)絡(luò)信息。MQTT協(xié)議的出現(xiàn),是因?yàn)橐苿踊ヂ?lián)網(wǎng)目前尚處于起步階段,無法提供可靠的網(wǎng)絡(luò)保證。
MQTT協(xié)議優(yōu)點(diǎn)
1.MQTT的獨(dú)特功能是每個消息頭都可以縮短為2個字節(jié)。對于HTTP,為每個新請求消息重新建立HTTP連接會產(chǎn)生可觀的開銷。 MQ和MQTT使用的持久連接可以大大減少這種開銷;
2.包容不穩(wěn)定的網(wǎng)絡(luò),MQTT和MQ可以從諸如斷開連接之類的故障中恢復(fù),無需進(jìn)一步的代碼要求。但是,HTTP本身無法實(shí)現(xiàn)此目標(biāo),并且客戶端必須重試編碼,這會增加身份問題;
3.低功耗MQTT專為低功耗目標(biāo)而設(shè)計(jì)。HTTP設(shè)計(jì)未考慮此因素,這會增加功耗;
4.在連接數(shù)百萬個客戶端的情況下,在HTTP堆棧中維護(hù)數(shù)百萬個并發(fā)連接,需要大量工作才能提供支持。盡管這種支持是可行的,但大多數(shù)商業(yè)產(chǎn)品都經(jīng)過優(yōu)化以處理此訂單上的持久連接。 IBM提供了IBM MessageSight,這是一種單機(jī)架安裝服務(wù)器,已經(jīng)過測試,可以通過MQTT處理多達(dá)一百萬個并發(fā)設(shè)備。相反,MQ不是為許多同時進(jìn)行的客戶設(shè)計(jì)的;
5.推送通知。能夠及時向客戶發(fā)送通知,以常規(guī)的輪詢或推送方法。從電池、系統(tǒng)負(fù)載、帶寬而言,推送是最佳解決方案;
6.客戶端平臺的差異。 HTTP和MQTT客戶端都在許多平臺上實(shí)現(xiàn)。 MQTT的簡單性可幫助以最少的努力在其他客戶端上實(shí)施MQTT;
7.防火墻容錯能力。某些公司防火墻將出站連接限制到某些預(yù)定義的端口,這些端口通常僅限于HTTP(端口80),HTTPS(端口443)等,HTTP在這種情況下顯然可以工作。 MQTT封裝在WebSockets連接中,并顯示為HTTP升級請求,因此可以在這種情況下運(yùn)行;
MQTT協(xié)議缺點(diǎn)
實(shí)際上,MQTT被廣泛使用,可以在幾乎任何大型硬件和互聯(lián)網(wǎng)公司中找到,例如Facebook、BP、阿里巴巴、百度。由于MQTT本身的技術(shù)優(yōu)勢,越來越多的公司選擇MQTT作為物聯(lián)網(wǎng)產(chǎn)品通信的標(biāo)準(zhǔn)協(xié)議。結(jié)果,工程師逐漸意識到MQTT協(xié)議的功能需要大規(guī)模商業(yè)化進(jìn)行改進(jìn)。例如:
1.如果沒有完整的SDK,則需要用于不同異構(gòu)設(shè)備的軟件SDK軟件包才能與MQTT服務(wù)器(例如MCU,Linux,Android,IOS,WEB)進(jìn)行通信,以實(shí)現(xiàn)互連和互操作性;
2.不支持文件和AV。在某些應(yīng)用場景中,需要傳輸?shù)男畔⒖赡懿幌抻谛枰ㄟ^AV與文件通信的指令,例如語音和視頻信號;
3.不支持與第三方HTTP集成。 MQTT協(xié)議優(yōu)于常規(guī)HTTP協(xié)議,但是基于傳統(tǒng)HTTP協(xié)議的WEB服務(wù)器仍在主流市場中占主導(dǎo)地位。服務(wù)器應(yīng)與MQTT協(xié)議互連,以降低升級成本;
4.不支持負(fù)載分配。負(fù)載分配服務(wù)器對于高并發(fā)性和防止惡意攻擊也是必不可少的;
5.不支持用戶管理界面。當(dāng)用戶分析設(shè)備行為數(shù)據(jù)時,這一點(diǎn)尤其重要。在工業(yè)4.0和大數(shù)據(jù)時代,這是不可避免的需求。
6.設(shè)備脫機(jī)后,不支持脫機(jī)消息來補(bǔ)償從MQTT服務(wù)器到設(shè)備的控制信息丟失;
7.不支持點(diǎn)對點(diǎn)通信,并且使用標(biāo)準(zhǔn)的MQTT協(xié)議。從理論上講,點(diǎn)對點(diǎn)通信可以通過相互訂閱來實(shí)現(xiàn),但是邏輯相對復(fù)雜并且涉及設(shè)備安全性。當(dāng)設(shè)備B和設(shè)備C相同時-在主體的情況下,設(shè)備A無法知道消息是來自設(shè)備B還是來自設(shè)備C,并且消息很可能是被設(shè)備D竊聽的;
8.不支持群組通信或群組管理,而是實(shí)現(xiàn)群組成員的管理。小組成員可以交換消息,如果一個設(shè)備由多個人控制或多個設(shè)備由一個人控制,則此功能特別有用;