前面章節介紹過,MQTT協議和CoAP協議都是物聯網中比較流行的協議,都對傳輸量做了很大的精簡,傳輸開銷小,以適應物理網的網絡環境。
XMPP協議也有人說是適合物聯網通信的,但它是基於XML,對於嵌入式硬件設備來說,實現XML解析是非常困難和消耗資源的。
還有大家熟知的HTTP協議,它對於嵌入式硬件設備來說應該屬於重量級,也不太合適。目前很多物聯網設備都是資源受限型的,內存空間和計算能力都很有限。
◇
關於MQTT協議和CoAP協議比較的文章網絡上有很多,我們下面從應用場景要求的層面,分析該如何選擇使用哪種協議。
1、服務端主動發送給客戶端的數據(反控)的時效性(如通過APP控制硬件動作)
因MQTT協議是保持連接的,所以及時性相對很好;CoAP協議是無連接響應式通訊,因此不能主動推送,要等客戶端訪問才可以攜帶回去,及時性相對較差。
2、設備環境對底層協議的要求或限制
MQTT協議是建立在TCP協議基礎之上的,因此他也具備TCP協議的優缺點;CoAP協議是建立在UDP協議基礎之上的,因此他也具備UDP協議的優缺點。
3、在NAT網絡環境中是否需要調整
因MQTT協議是保持長連接的,所以在NAT下沒有問題;CoAP協議因是無連接方式,需要使用NAT穿透性手段。
4、實現多對多的通信還是單對單通信
因MQTT協議的消息模型是發布/訂閱式的,所以是可以多對多通信的;CoAP協議的消息模型是請求/響應式的,所以是單對單通信。
5、服務質量等級及自動重連重發
因MQTT協議有QoS配置,支持服務質量等級和自動重連重發機制;CoAP本身不具備,需要應用層自己來寫這個邏輯。
6、對網絡穩定性要求
MQTT協議利用自動重連重發機制解決網絡不穩定問題,斷網就會觸發重連;CoAP協議只有客戶端發送的時候需要保證網絡連接正常,其他時段無需連接。
7、對硬件設備的功耗影響
MQTT協議因有保持連接,所以功耗略高於CoAP協議。
◇
綜上所述,根據實際項目要求,參考選擇。如果有反控要求,盡量選擇MQTT協議,但是如果是使用電信的NB-IoT,則不需要處理硬件到服務端的傳輸協議,已經集成在模塊中,而且只能是CoAP協議(目前是這樣),也就忽略協議選擇這步。我們應用服務器與電信物聯網服務器進行API通訊即可。如果是通過WiFi模塊、有線寬帶、4G無線網等就需要考慮這步的協議選擇了。
本人親歷的項目中大部分都需要反控,所以選擇了MQTT協議(如不需要反控,我會優選CoAP協議)。這個系列里我們也是以MQTT作為傳輸協議進行討論,有關CoAP協議的相關內容大家可以網絡搜索了解一下,我們前面先不涉及這方面內容。
本節完,待續......