天天看點

IOT裝置通訊協定MQTT

哈喽大家好呀!筆者的公司最近在做IOT裝置相關的業務,基于這個契機尋找學習了一下關于IOT通訊協定相關的内容,最終在技術選型上選擇了使用MQTT協定并且結合EMQ上層MQTT中間件實作提供連結服務,那麼本輪博文就和大家來一起探讨學習有關IOT裝置的相關特性和MQTT協定的本質.

附上:

喵了個咪的部落格:

w-blog.cn MQTT官方 : https://github.com/mqtt/mqtt.github.io 服務中間件清單: https://github.com/mqtt/mqtt.github.io/wiki/servers 用戶端清單: https://github.com/mqtt/mqtt.github.io/wiki/libraries

1.IOT裝置的特性

在讨論标題的這個問題的時候我們需要先弄清楚IOT裝置是什麼,IOT裝置和傳統的智能裝置有什麼差別,筆者總結下的IOT裝置有如下特點:

  • 硬體能力差(存儲能力基本隻有幾MB,CPU頻率低連使用HTTP請求都很奢侈)
  • 系統千差萬别(Brillo,mbedOS,RIOT等)
  • 如使用電池供電,電量消耗敏感
  • 如果是小裝置裝置基數大需要維持大量線上連結
  • 網絡情況不穩定,移動網絡網絡資費貴,需要盡量減少開銷和穩定

在以上這樣苛刻的場景下很多技術上常用在智能裝置方案都望而卻步,總結一下我們主要面對下面三個問題:

  • socket.io,websocket? 不同的系統可能無法使用HTTP,裝置資源可能使用HTTP都奢侈
  • TCP/IP自定協定? 雖然不用在意系統,自定義封包怎麼解決網絡開銷問題?
  • 自主研發成本高,使用第三方IOT平台容易被技術或硬體綁定

2. MQTT為什麼适合IOT場景

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協定,使用方式比較類似于隊列軟體比如RabbitMQ,使用釋出/訂閱的方式提供互相之間的通訊,MQTT是為在計算能力有限,且工作在低帶寬、不可靠的網絡的遠端傳感器和控制裝置通訊而設計的協定,它具有以下主要的幾項特性:

  • 該協定支援所有平台,幾乎可以把所有聯網物品和外部連接配接起來
  • 有三種消息釋出服務品質
    • “至多一次”,消息釋出完全依賴底層 TCP/IP 網絡。會發生消息丢失或重複。這一級别可用于如下情況,環境傳感器資料,丢失一次讀記錄無所謂,因為不久後還會有第二次發送。
    • “至少一次”,確定消息到達,但消息重複可能會發生。
    • “隻有一次”,確定消息到達一次。這一級别可用于如下情況,在計費系統中,消息重複或丢失會導緻不正确的結果。
  • 小型傳輸,開銷很小(固定長度的頭部是 2 位元組),協定交換最小化,以降低網絡流量;
  • 使用 Last Will 和 Testament 特性通知有關各方用戶端異常中斷的機制;

除了MQTT的協定特性外還有一些客觀原因:

  • 對語言友好主流語言的用戶端都有
  • 大部分硬體方案天生支援
  • 數十個MQTT伺服器端程式可供選擇
  • 社群成熟解決方案被廣泛運用遇到問題友善尋求幫助

以上基本是我們為什麼也會選擇MQTT作為IOT協定的原因,需要更多的了解或者檢視用戶端支不支援和服務端實作可以參考官方github:

3 總結

關于MQTT的解釋隻是一個開篇,下一章節将說到我們的主角EMQ百萬級MQTT消息服務,那麼多謝大家的關注我們下節見……

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!

繼續閱讀