歡迎光臨
每天分享高質量文章

三分鐘弄懂物聯網流行協議——MQTT

最熱門的技術莫過於:人工智慧,區塊鏈和物聯網。筆者今天就花三分鐘給大家介紹一個物聯網中非常的基礎一個常用的流行協議,MQTT。

MQTT (Message Queue Telemetry Transport),翻譯成中文就是,遙測傳輸協議,其主要提供了訂閱/釋出兩種訊息樣式,更為簡約、輕量,易於使用,特別適合於受限環境(頻寬低、網路延遲高、網路通訊不穩定)的訊息分發,屬於物聯網(Internet of Thing)的一個標準傳輸協議。

為什麼使用MQTT 協議?

MQTT(英語全稱,Message Queue Telemetry Transport),中文翻譯過來就是遙測傳輸協議:其主要提供訂閱/釋出樣式,更為簡約、輕量,易於使用,針對受限環境(頻寬低、網路延遲高、網路通訊不穩定),屬於物聯網(Internet of Thing)的一個傳輸協議。設計思想是開放、簡單、輕量、易於實現。這些特點使它適用於受限環境。例如,但不僅限於此:

  • 特別適合於網路代價昂貴,頻寬低、不可靠的環境。

  • 能在處理器和記憶體資源有限的嵌入式裝置中執行。

  • 使用釋出/訂閱訊息樣式,提供一對多的訊息釋出,從而解除應用程式耦合。

  • 使用 TCP/IP 提供網路連線。

  • 提供Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制。

對訊息中介軟體,估計大家不得不關心的就是訊息的可靠性,也就是訊息的釋出服務質量,可喜的是,MQTT支援三種訊息釋出服務質量(QoS):

  • “至多一次”(QoS==0),訊息釋出完全依賴底層 TCP/IP 網路。會發生訊息丟失或重覆。這一級別可用於如下情況,環境感測器資料,丟失一次讀記錄無所謂,因為不久後還會有第二次傳送。

  • “至少一次”(QoS==1),確保訊息到達,但訊息重覆可能會發生。

  • “只有一次”(QoS==2),確保訊息到達一次。這一級別可用於如下情況,在計費系統中,訊息重覆或丟失會導致不正確的結果。小型傳輸,開銷很小(固定長度的頭部是 2 位元組),協議交換最小化,以降低網路流量。

協議規範的版本

MQTT的協議最新的三個版本是:3.1.1,3.1.0和5.0的協議。

  • 3.1.0的規範如下

    http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html

  • 3.1.1的規範如下

    http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718029

  • 5.0 的規範如下

    http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html

其中5.0還只是一個提案(2017年7月13日釋出的一個草稿版的提案),所以本篇文章暫時不涉及MQTT 5.0的協議,考慮到目前主流和成熟的MQTT協議的應用都是MQTT 3.1.1的協議,所以筆者還是以MQTT 3.1.1的協議為基準,給大家分享,只要這個會了,其他的自然不在話下。需要註意的是,MQTT 3.1.0和3.1.1 規範,還是有小部分的區別的。比如可變頭部中,在3.1.0的規範中,其關鍵字是,“MQISdP”。

支援MQTT協議訊息中介軟體產品?

目前有很多的MQTT訊息中介軟體伺服器,如下,都是MQTT協議的伺服器端的實現。

  • IBM Websphere

  • MQ Telemetry

  • IBM MessageSight

  • Mosquitto

  • Eclipse Paho

  • emqttd Xively

  • m2m.io

  • webMethods

  • Nirvana Messaging

  • RabbitMQ

  • Apache ActiveMQ

  • Apache Apollo

  • Moquette

  • HiveMQ

  • Mosca

  • Litmus Automation Loop

  • JoramMQ

  • ThingMQ

  • VerneMQ

支援一對多的訊息訂閱

MQTT協議,支援一對多的基於訊息主題(Topic)的訊息訂閱,也就是一個MQTT的客戶端,傳送一條特定主題的訊息,

能同時支援多個訂閱者同時訂閱。

如下圖所示意,筆記本和手機都訂閱了訊息主題為temperature的訊息,當溫度感測器釋出了temperature的訊息(當前溫度為21 C), 筆記本和手機都會受到溫度感測器釋出的溫度。

MQTT客戶端的語言支援

目前市面上的主流語言都支援。

  • Java

  • Javascript

  • C/C++

  • Python

  • Ruby

  • Objective-C

如果您對MQTT協議感興趣,請關註我的CSDN部落格,chancein007。

如果您對MQTT有任何的疑問,請關註我的今日頭條自媒體號,併在文章後面留言,我將盡可能第一時間回覆。

【部分圖片來源於網路,如果侵權,請與我聯絡刪除】

    贊(0)

    分享創造快樂