MQTT協議的初淺認識之鏈接創建

MQTT百科

MQTT(消息隊列遙測傳輸)是ISO 標準(ISO/IEC PRF 20922)下基於發佈/訂閱範式的消息協議。它工做在 TCP/IP協議族上,是爲硬件性能低下的遠程設備以及網絡情況糟糕的狀況下而設計的發佈/訂閱型消息協議,爲此,它須要一個消息中間件 。編程

從危機百科能夠看出,MQTT是一種協議,不是一種消息隊列。儘管,它有消息隊列的設計,但更側重是一種網絡協議。 通常推薦使用2014年10月30日發佈的MQTT 3.1.1版本,關於MQTT3.1.1版本優點的文章服務器

幾個概念

客戶端(Client)

MQTT客戶端是運行MQTT客戶端庫並經過網絡鏈接到MQTT中間件的任何設備(從嵌入式設備到服務器)。MQTT客戶端庫可由各類編程語言實現。 例如,Android,Arduino,C,C ++,C#,Go,iOS,Java,JavaScript和.NET。網絡

中間件(Broker)

MQTT中間件是MQTT協議的核心。負責接收全部消息,過濾消息,肯定訂閱每條消息的客戶端,以及將消息發送給這些訂閱的客戶端。還包括對持久會話的管理,以及客戶端的認證和受權等功能。例如:Mosquitto就是由Eclipse基金會維護開發的MQTT中間件。由Apache基金會維護開發的ActiveMQ消息中間件支持MQTT協議。session

MQTT 鏈接

這裏借用hivemq的幾張圖.tcp

MQTT鏈接過程

mqtt-tcp-ip-stack

MQTT協議是基於TCP/IP的。客戶端和中間件創建鏈接的時候:編程語言

  • 客戶端先發送CONNECT消息給中間件
  • 中間件收到客戶端的鏈接請求後返回CONNACK消息

connect-flow

CONNECT消息

connect

參數說明:ide

  • clientId:表示客戶端id,能夠是設備惟一id,或者是業務系統用戶id
  • cleanSession:false表示使用持久會話;true表示不使用持久會話
  • username:mqtt中間件的驗證用戶名
  • password:mqtt中間件的驗證密碼
  • lassWill開頭:表示客戶端從中間件中意外斷開時中間件應該怎麼作
  • keepAlive:表示客戶端與中間件之間在沒有任何消息的推送的時候,多久啓用一次客戶端發一次PINGREQ消息,中間件收到PINGREQ消息後,必須給客戶端回覆PINGRESP消息。這個參數很重要。

CONNACK消息

CONNACK消息包含兩個部分:性能

  • 會話是否持久標識
  • mqtt鏈接狀態標識

connack1

參數說明:ui

  • sessionPresent::true表示是持久會話;不然,反之。
  • returnCode:見下表。
Return Code Return Code Response
0 Connection accepted
1 Connection refused, unacceptable protocol version
2 Connection refused, identifier rejected
3 Connection refused, server unavailable
4 Connection refused, bad user name or password
5 Connection refused, not authorized

後面,咱們再談談MQTT的訂閱發佈過程.net

參考

MQTT Essentials: Part 1 – Introducing MQTT

MQTT

Mosquitto服務器日誌分析總結

MQTT Essentials Part 10: Keep Alive and Client Take-Over

MQTT Essentials Part 3: Client, Broker, and Connection Establishment

相關文章
相關標籤/搜索