簡介
-
MQTT(Message Queuing Telemetry Tranport)中文稱消息隊列遙測傳輸協議,IBM公司爲了一個通信衛星連接管道的項目研發的,是一種訂閱/發佈模式的“輕量級”通信協議,可以爲遠程設備提供穩定可靠的信息傳輸。
-
常見的通信協議
-
TCP/IP參考模型可以分爲四層:應用層、傳輸層、網絡層、鏈路層。TCP和UDP位於傳輸層,應用層常見的協議有HTTP、FTP、SSH等。MQTT協議運行於TCP之上,屬於應用層協議,因此只要是支持TCP/IP協議棧的地方,都可以使用MQTT。
-
MQTT協議中的三個角色
發佈方:發佈消息的客戶端
服務器(代理):
- 接受來自客戶的網絡連接
- 接受客戶發佈的應用信息
- 處理來自客戶端的訂閱和退訂請求
- 向訂閱的客戶轉發應用程序消息
訂閱方:訂閱消息主題和接收消息的客戶端
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客戶端發送消息請求,發送完成後返回應用程序線程