MQTT--學習

簡介

  • MQTT(Message Queuing Telemetry Tranport)中文稱消息隊列遙測傳輸協議,IBM公司爲了一個通信衛星連接管道的項目研發的,是一種訂閱/發佈模式的“輕量級”通信協議,可以爲遠程設備提供穩定可靠的信息傳輸。

  • 常見的通信協議
    在這裏插入圖片描述

  • TCP/IP參考模型可以分爲四層:應用層、傳輸層、網絡層、鏈路層。TCP和UDP位於傳輸層,應用層常見的協議有HTTP、FTP、SSH等。MQTT協議運行於TCP之上,屬於應用層協議,因此只要是支持TCP/IP協議棧的地方,都可以使用MQTT。

  • MQTT協議中的三個角色

    發佈方:發佈消息的客戶端

    服務器(代理):

    1. 接受來自客戶的網絡連接
    2. 接受客戶發佈的應用信息
    3. 處理來自客戶端的訂閱和退訂請求
    4. 向訂閱的客戶轉發應用程序消息

    訂閱方:訂閱消息主題和接收消息的客戶端

在這裏插入圖片描述

MQTT應用

MQTT協議廣泛應用於物聯網、移動互聯網、智能硬件、車聯網、電力能源等領域。

1、物聯網M2M通信,物聯網大數據採集

2、Android消息推送,WEB消息推送

3、移動即時消息,例如Facebook Messenger

4、智能硬件、智能傢俱、智能電器

5、車聯網通信,電動車站樁採集

6、智慧城市、遠程醫療、遠程教育

7、電力、石油與能源等行業市場

MQTT特點

  • 實現簡單
  • 輕量、佔用帶寬低
  • 可傳輸任意類型的數據
  • 可保持的會話(session)
  • 基於 TCP 協議的應用層協議;
  • 採用 C/S 架構;
  • 使用訂閱/發佈模式,將消息的發送方和接受方解耦;
  • 提供 3 種消息的 QoS(Quality of Service): 至多一次,最少一次,只有一次;
  • 收發消息都是異步的,發送方不需要等待接收方應答。

MQTT服務器TCP佔用端口

客戶端連接的是1883端口
在這裏插入圖片描述

MQTT客戶端

1、功能:

  • 發佈其他客戶端可能會訂閱的信息;
  • 訂閱其它客戶端發佈的消息;
  • 退訂或刪除應用程序的消息;
  • 斷開與服務器連接。

2、庫:

  • emqtt項目組: https://github.com/emqtt
  • Paho C 庫:http://www.eclipse.org/paho/files/mqttdoc/MQTTAsync/html
  • mqtt.org: https://github.com/mqtt/mqtt.github.io/wiki/libraries

MQTT協議中的術語

  • 主題(topic):消息的類型,訂閱者訂閱後,就會收到該主題的消息內容。
  • 消息體(payload):消息的內容,是指訂閱者具體要使用的內容。
  • 訂閱:訂閱包含主題篩選器(Topic Filter)和最大服務質量(QoS)。訂閱會與一個會話(Session)關聯。一個會話可以包含多個訂閱。每一個會話中的每個訂閱都有一個不同的主題篩選器。
  • 會話:每個客戶端與服務器建立連接後就是一個會話,客戶端和服務器之間有狀態交互。會話存在於一個網絡之間,也可能在客戶端和服務器之間跨越多個連續的網絡連接。
  • 主題篩選器:一個對主題名通配符篩選器,在訂閱表達式中使用,表示訂閱所匹配到的多個主題。

MQTT協議報文結構

固定報頭|可變報頭|消息體
  • 固定頭(Fixed header):存在於所有MQTT數據包中,表示數據包類型及數據包的分組類標識。

    (1)位表示
    在這裏插入圖片描述
    (2)數據類型
    在這裏插入圖片描述

  • 可變頭(Variable header):存在於部分MQTT數據包中,數據包類型決定了可變頭是否存在及其具體內容。

  • 消息體(Payload):存在於部分MQTT數據包中,表示客戶端收到的具體內容。

      (1)CONNECT:消息體內容主要是:客戶端的ClientID、訂閱的Topic、Message以及用戶名
     和密碼。
     (2)SUBSCRIBE:消息體內容是一系列的要訂閱的主題以及QoS。
     
     (3)SUBACK:消息體內容是服務器對於SUBSCRIBE所申請的主題及QoS進行確認和回覆。
     
     (4)UNSUBSCRIBE:消息體內容是要訂閱的主題。
    

MQTT協議中的動作

  • Connect:等待與服務器建立連接
  • Disconnect:等待MQTT客戶端完成所做的工作,並與服務器斷開TCP/IP會話
  • Subscribe:等待完成訂閱
  • UnSubscribe:等待服務器取消客戶端的一個或多個topics訂閱
  • Publish:MQTT客戶端發送消息請求,發送完成後返回應用程序線程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章