標籤:
什麼是MQTT協議
MQTT(訊息佇列遙測傳輸協議)是IBM在1999年專門針對物聯網等應用情境來制訂的輕量級雙向訊息傳輸協議,它主要是為瞭解決物聯網上使用到的裝置的互相通訊的問題,以及這些裝置與後端應用系統之間通訊的問題。
為什麼需要MQTT(或類似)協議
隨著智能硬體和移動互連網技術的快速發展,傳統的互連網協議越來越難以滿足物聯網的需要,體現在:移動網路代價昂貴,頻寬低、可靠性差;在嵌入裝置中運行,處理器和記憶體資源有限;海量線上裝置產生龐大資料,給雲端帶來很大的網路開銷和處理壓力。
MQTT如何工作
MQTT包括用戶端、代理(broker)兩部分,以智能家居系統為例,末端智能電器與手機為用戶端,雲中心為代理。用戶端首先向代理髮起請求,代理收到後對用戶端認證,認證通過後在用戶端與代理之間建立一個TCP長串連通道,用戶端通過該通道訂閱若干關注的主題(Topic),同時在自身狀態變化時,向相應的主題發布訊息,代理將該訊息發給正在訂閱該主題的所有用戶端,如。與HTTP不同,MQTT是一種多對多的通訊協定,裝置直接不直接相連,而是通過一個代理實現互相通訊。它是一種天然的非同步協議,可以很好地將請求端與響應端解耦。
MQTT協議有什麼好處
MQTT針對物聯網情境最佳化設計,考慮了網路的可達性,訊息的連通性,能耗等方面。具體來講:
一是它本身是特別輕量級的,使用一個8位的系統、30K的空間,就可以運行MQTT的用戶端。
二是它針對不穩定網路而設計,通常意義上的傳輸協議都是基於穩定網路的傳輸的,會專門為了這種穩定的網路去做一些最佳化。MQTT正好相反,協議較多地考慮了網路的不確定性,它本身還非常精簡,最小的傳輸位元組只有兩個,使得在較惡劣的網路條件下仍然有較好的訊息可達率。
三是它的訊息的互動模式跟傳統意義上不太一樣,它採用了發布和訂閱的模式。當資料來源發布一條訊息的時候,可以有多個訂閱端同時能收到這個訊息,這對於很多裝置互聯的物聯網情境比較靈活。
四是有訊息發布服務品質(QoS)機制,使用者可根據應用情境需要,選擇“至多一次”、“至少一次”或“只有一次”的傳輸品質,在效率與品質之間進行權衡。
五是用戶端異常中斷的通知機制(Last-Will-And-Testament)。當一個裝置連不上的時候,伺服器端有一個專門的機制能馬上知道這個裝置出了什麼狀況,從而可以非常快的反饋,對某一個結點做出一些補償。
MQTT取得了哪些成功實踐
1.物聯網雲
Evothings:國外物聯網生態平台,提供全套的軟硬體開發工具,協助開發人員構建智能硬體原型、開發訊息推送服務。
Yeelink:國內最大的物聯網雲平台之一,為使用者和智能硬體開發人員提供感應器雲端服務,並通過即時資料處理, 實現可靠的狀態監控。
2.即時訊息推送
Facebook是較早大規模採用MQTT 協議的互連網巨頭,其在移動用戶端中使用MQTT來更新通知、訊息和書籤等。
雲吧等平台藉助MQTT 協議提供即時Message Service,即時推送訊息到任意裝置、快速的給上百萬使用者發送訊息,實現單台裝置一對一推送,即時展示線上使用者、使用方式。目前在為幾萬開發人員、上億終端提供推送服務。國內搜狐等企業也使用了MQTT作為Android手機用戶端與伺服器端推送訊息的協議。
MQTT還有哪些問題
1.在網路變化頻繁或者不太穩定的2G/3G網路環境下表現不佳。
用戶端在每次TCP斷開或斷網後,會即刻發起TCP重連,串連成功後依次發送CONNECT命令、訂閱SUBSCRIBLE命令,當網路頻繁切換或者不太穩定時,上述機制一定程度上加重已經不堪的弱網路負擔。一些參考資源指出在業務層面進行重連策略、等待逾時等調整可最佳化該問題。此外,CoAP等其他基於UDP傳輸的物聯網協議對這類網路具有更好的適應性。
2.針對沒有TCP/IP支援的終端環境MQTT無法應用。
可以採用MQTT-SN(MQTT For Sensor Networks)協議進行補充,它是為了非常受限類似感應器設計的,能夠基於IEEE 802.15.4等無線區域網路發送UDP資料包,再通過MQTT-SN網關與MQTT broker建立串連。流程架構大致如下:
MQTT推薦資源
Mosca:基於Nodejs實現的一款功能較完善的broker
Paho: C/C++、Python、Java等語言的MQTT 用戶端庫
mosquitto:一款功能完善的開源原生broker
著作權聲明:原文出處:http://mt.sohu.com/20160310/n439960879.shtml?qq-pf-to=pcqq.c2c,海鑫科金,感謝原作者的辛苦創作,如轉載涉及著作權等問題,請與我們聯絡(公眾號:數通暢聯,QQ群:299719834)將在第一時間處理,謝謝!
海鑫智聖:物聯網漫談之MQTT協議