MQTT 和 CoAP 哪個最可能成為未來物聯網通信標準協議?
- 2019 年 12 月 6 日
- 筆記
導語:近日,騰訊無線網絡與物聯網技術負責人李秋香與高校科研教授、產業鏈、運營商等各行業的嘉賓一起參與了知乎「 科技共振之 5G+ 」活動,除了專業的5G探討,也聊了不少和開發者們息息相關的問題。在為北郵學子提供5G時代來臨前的科研和就業建議時,提出 「面向 5G 的內容創作可能會迎來一個高潮,比如說視頻、新媒體等創新項目。相應的一些工作機會可能也會出現,有 AR、VR 各種內容製作、編輯、導演等等這樣一些角色」。
基於此,雲加社區聯手知乎科技,從知乎超過 10000 條 5G 相關問答中精選內容落地社區專題「 共探 5G 」。與大家一起,關注從 4G 到 5G 的變化 ,討論 5G 的技術原理與未來發展方向,探尋 5G 帶來的職業發展新機遇和速度變革中的新可能。
本文為知乎用戶劉凱關於「 MQTT 和 CoAP 哪個最可能成為未來物聯網通信標準協議?」的內容分享。
問題:MQTT 和 CoAP 哪個最可能成為未來物聯網通信標準協議?
MQTT是IBM開發的一個即時通訊協議,基於TCP的,號稱是可以支持所有的平台。 CoAP是運行於UDP之上的,並且非常的小巧,最小只有4個位元組。 可以說兩者都是營運物聯網大趨勢和為了適應M2M而生的,相比於其他的通信協議也有較大的優勢。

以上是最近兩者的Google trends。 話說國外貌似這兩個協議非常的火啊,hivemq等等一堆啥啥mq,還有pubnub、xively,CoAP也有一大群真粉,但國內貌似不太感冒,唯一知道的是 雲巴用的mqtt,呃。。。貌似跑題了。 如上,在如今物聯網如火如荼各種造勢的時代,真正實現智能,M2M是必不可少的,而MQTT和CoAP哪個最可能成為未來物聯網的標準協議呢?或者有其他更有潛力的通信協議?
回答:我現在認為CoAP和MQTT的協議除了考慮設備的TCP/UDP堆棧實現能力和對設備的壓力之外,更加重點的考慮點是:
- 服務器架構和開發成本?
- 應用本身數據流向,流量,頻率,持久的需求?
- 長連接還是短連接?
- 數據分享API的需求?
MQTT,其實就是IBM把服務器間異步通訊用的消息隊列Message Queue(MQ)中間件前置到IOT接入而已。天生適合多對多(服務器對服務器,設備對服務器,設備對APP),異步,後台應用,以及即時通訊(多客戶端對等)場景。不過就是約定了報文頭而已。自己用Redis PubSub/MQ也可以構建。最簡單的IOT架構:Device+MQTT+APP,如果不存儲數據的話。需要數據持久可以是:Device+MQTT+Web/APP+DB(NoSQL/NewSQL/BigData/Lambda)+APP。
CoAP,基於UDP接口,參考HTTP上的REST API,適合數據採集這種多(設備)對一(服務器) 場景,系統架構類似於傳統Web。但是CoAP UDP不是面對連接的,所以方向控制需要高層構建協議。CoAP支持多播,也可以實現一對多場景,但是好像和MQTT不一樣。應該是局域網內的多播?了解的兄弟請提點一下。但總的網站架構迎來類似於傳統Web:CoAP+Web+DB+APP。弱勢是,數據必須流經DB轉給第三方。當然,如果Web內部有MQ,可以通過REST API暴露給第三方。變成: CoAP + Web + DB + APP + Redis/MQ + REST + APP
請觀察最近的BAT動向,都把MQTT作為物聯網前置接入套件單列出來作為標準雲服務提供。阿里雲物聯網套件,百度開放雲物聯網服務IOT,騰訊QQ物聯平台,中移動OneNet開放雲,Amazon IOT服務……更別提環信,野狗之類原來做IM雲服務的,都將MQTT作為IM/IOT共享的接入服務了。
MQTT還有一點:長連接。採用長連接MQTT還是無連接CoAP,和應用數據屬性有關。是維持大量非活動長連接消耗大,還是大量UDP包對於服務器消耗大,我一直沒有得到結論。反正我從Windows發起大量UDP壓測,總是報給我操作系統端口不夠的一個錯誤。
我之前的架構是:Socket + Web + DB(Redis/SQL)+ APP,現在不得不將Redis作為溝通Socket/Web的通道,和第三方APP/Sever的通道。但用Redis PubSub構建實現起來很麻煩。而且也不是標準實現,客戶實施的周期反而不如MQTT。所以準備改造成為上述MQTT協議方式。
【更新】
CoAP大體上是採用數據報方式,可以基於UDP,短消息,以及6LowPAN等傳輸層。而且大體上在WSN內部可以使用。不過由於CoAP也可以用於網關與雲之間通訊,所以現在出現了CoAP over TCP的草案。不過,我覺得該草案受到CoAP RFC7252的約束太多,所以我和客戶約定了一個版本,私底下命名為CoTCP(CoAP over TCP)。呵呵,私有的協議。但是保留了面向資源的REST風格。
作者:劉凱
鏈接:https://www.zhihu.com/question/34767514/answer/87340564
來源:知乎 著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。