MQTT 簡介

【參考文章】:基於Mqtt的IM開發html

【參考文章】:阿里___MQTT中協議QoS的實現git

【參考文章】:MQTT入門篇github

1. 簡介

  MQTT 是一個客戶端服務端架構的發佈/訂閱模式的消息傳輸協議。它的設計思想是輕巧、開放、簡單、規範,所以易於實現。這些特色使得它對不少場景來講都是很好的選擇,包括受限的環境如機器與機器的通訊(M2M)以及物聯網環境(IoT),這些場景要求很小的代碼封裝或者網絡帶寬很是昂貴。網絡

  由於MQTT是協議,想要使用它就必須找實現這個協議的庫文件或者服務組件,這是實現MQTT協議的服務組件架構

  搭建完成MQTT的服務端環境,再經過封裝的MQTT客戶端API,就可使用了。post

2. 特色

  • 輕量級的 machine-to-machine 通訊協議。
  • publish/subscribe模式。
  • 基於TCP/IP。
  • 支持QoS。

3. 應用場景

  • 適合於低帶寬、不可靠鏈接、嵌入式設備、CPU內存資源緊張。
  • 是一種比較不錯的Android消息推送方案。
  • FacebookMessenger採用了MQTT。
  • MQTT有可能成爲物聯網的重要協議

4. 主題

  MQTT是經過主題對消息進行分類的,本質上就是一個UTF-8的字符串,不過能夠經過反斜槓表示多個層級關係。主題並不須要建立,直接使用便可。url

  主題還能夠經過通配符進行過濾。spa

  /:用來表示層次,好比a/b,a/b/c。  設計

  #:表示匹配>=0個層次,好比a/#就匹配a/,a/b,a/b/c。單獨的一個#表示匹配全部。不容許 a#和a/#/c。代理

  +:表示匹配一個層次,例如a/+匹配a/b,a/c,不匹配a/b/c。單獨的一個+是容許的,a+不容許,a/+/b不容許

5. 服務質量(Quality of Service,QoS)

5.1 QoS=0

  最多一次,質量級別最低,不須要應答確認。
  盡操做環境所能提供的最大努力分發消息,可是遇到意外並不會重試。消息可能會丟失。
  例如,這個等級可用於環境傳感器數據,單次的數據丟失不要緊,由於不久以後會再次發送。

5.2 QoS=1

  至少一次,有可能重複。
  消息接收者若是沒有知會或者知會自己丟失,消息發送者會再次發送以保證消息接收者至少會收到一次,固然可能形成重複消息。
  收到控制報文後須要應答確認,好比建立鏈接、發消息、收消息、心跳。

5.3 QoS=2

  只有一次,確保消息只到達一次(用於比較嚴格的計費系統)。
  收到控制報文後須要應答確認,最高的服務質量,須要額外的開銷,由於這種質量下,收到控制報文須要雙向確認應答。

6. 消息類型

MQTT擁有14種不一樣的消息類型:

  1. CONNECT:客戶端鏈接到MQTT代理
  2. CONNACK:鏈接確認
  3. PUBLISH:新發布消息
  4. PUBACK:新發布消息確認,是QoS 1給PUBLISH消息的回覆
  5. PUBREC:QoS 2消息流的第一部分,表示消息發佈已記錄
  6. PUBREL:QoS 2消息流的第二部分,表示消息發佈已釋放
  7. PUBCOMP:QoS 2消息流的第三部分,表示消息發佈完成
  8. SUBSCRIBE:客戶端訂閱某個主題
  9. SUBACK:對於SUBSCRIBE消息的確認
  10. UNSUBSCRIBE:客戶端終止訂閱的消息
  11. UNSUBACK:對於UNSUBSCRIBE消息的確認
  12. PINGREQ:心跳
  13. PINGRESP:確認心跳
  14. DISCONNECT:客戶端終止鏈接前優雅地通知MQTT代理
相關文章
相關標籤/搜索