1、先看下相關國外的專業數據對四大協議的比較:node
Protocol CoAP XMPP RESTful HTTP MQTTandroid
Transport | UDP | TCP | TCP | TCP |
Messaging | Request/Response | Publish/Subscribe Request/Response | Request/Response | Publish/Subscribe Request/Response |
2G, 3G, 4G Suitability (1000s nodes) | Excellent | Excellent | Excellent | Excellent |
LLN Suitability (1000s nodes) | Excellent | Fair | Fair | Fair |
Compute Resources | 10Ks RAM/Flash | 10Ks RAM/Flash | 10Ks RAM/Flash | 10Ks RAM/Flash |
Success Storied | Utility Field Area Networks | Remote management of consumer white goods | Smart Energy Profile 2 (premise energy management/home services) | Extending enterprise messaging into IoT application |
XML的解析對於嵌入多設備來講是比較痛苦的 ,因此在嵌入設備上作開發的時候,最好不要選擇基於XML的協議。緩存
2、四大協議的基本介紹:服務器
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通信協議,有可能成爲物聯網的重要組成部分。該協議支持全部平臺,幾乎能夠把全部聯網物品和外部鏈接起來,被用來當作傳感器和致動器(好比經過Twitter讓房屋聯網)的通訊協議架構
REST 指的是一組 架構約束條件和原則。知足這些約束條件和原則的應用程序或設計就是 RESTful。app
Web 應用程序最重要的 REST 原則是,客戶端和服務器之間的交互在請求之間是無狀態的。從客戶端到服務器的每一個請求都必須包含理解請求所必需的信息。若是服務器在請求之間的任什麼時候間點重啓,客戶端不會獲得通知。此外,無狀態請求能夠由任何可用服務器回答,這十分適合 雲計算之類的環境。客戶端能夠緩存數據以改進性能oop
3、從現有的移動端(Android)消息推送方案中,也能夠看出MQTT協議和XMPP協議的優缺點性能
方案一、 使用GCM服務(Google Cloud Messaging)
簡介:Google推出的雲消息服務,即第二代的G2DM。
優勢:Google提供的服務、原生、簡單,無需實現和部署服務端。
缺點:Android版本限制(必須大於2.2版本),該服務在國內不夠穩定、須要用戶綁定Google賬號,受限於Google。
方案二、 使用XMPP協議(Openfire + Spark + Smack)
簡介:基於XML協議的通信協議,前身是Jabber,目前已由IETF國際標準化組織完成了標準化工做。
優勢:協議成熟、強大、可擴展性強、目前主要應用於許多聊天系統中,且已有開源的Java版的開發實例androidpn。
缺點:協議較複雜、冗餘(基於XML)、費流量、費電,部署硬件成本高。
方案三、 使用MQTT協議
簡介:輕量級的、基於代理的「發佈/訂閱」模式的消息傳輸協議。
優勢:協議簡潔、小巧、可擴展性強、省流量、省電,目前已經應用到企業領域,且已有C++版的服務端組件rsmb。
缺點:不夠成熟、實現較複雜、服務端組件rsmb不開源,部署硬件成本較高。
方案四、 使用HTTP輪循方式
簡介:定時向HTTP服務端接口(Web Service API)獲取最新消息。
優勢:實現簡單、可控性強,部署硬件成本低。
缺點:實時性差。
網站
對各個方案的優缺點的研究和對比,推薦使用MQTT協議的方案進行實現,主要緣由是: MQTT最快速,也最省流量(固定頭長度僅爲2字節),且極易擴展,適合二次開發 。ui
總結來講:
若是咱們對上面的結果進行一次PK,我想最後的結果就是MQTT vs CoAP。HTTP對於嵌入式設備來講過重了,也不靈活,XMPP就更不用說了,與MQTT還有一比的即是CoAP——一個還在草稿階段的協議。