mqtt協議理解

1. 應用場景: 低帶寬,數據頭儘可能小。

2. 屬於應用層協議,採用TCP承載。

3. 採用 發佈-> (代理)  -> 訂閱模式(利用中間代理實現了異步通訊),發佈方發送的相當於是個廣播信息, 設置一個主題。訂閱方根據主題選擇自己訂閱的報文。 

不過是發佈方還是訂閱方都看作broker(代理)的客戶端,採用mqtt協議通訊。 

4. 報文結構

MQTT-Standard-Packet

 控制頭(1字節)包含了包類型和flags

 包類型:

  • CONNECT:客戶端連接到MQTT代理
  • CONNACK:連接確認
  • PUBLISH:新發布消息
  • PUBACK:新發布消息確認,是QoS 1給PUBLISH消息的回覆
  • PUBREC:QoS 2消息流的第一部分,表示消息發佈已記錄
  • PUBREL:QoS 2消息流的第二部分,表示消息發佈已釋放
  • PUBCOMP:QoS 2消息流的第三部分,表示消息發佈完成
  • SUBSCRIBE:客戶端訂閱某個主題
  • SUBACK:對於SUBSCRIBE消息的確認
  • UNSUBSCRIBE:客戶端終止訂閱的消息
  • UNSUBACK:對於UNSUBSCRIBE消息的確認
  • PINGREQ:心跳
  • PINGRESP:確認心跳
  • DISCONNECT:客戶端終止連接前優雅地通知MQTT代理

flag字段:

MQTT-Message-Flags

 

針對消息發佈, flags控制的是qos(quality of service) 分爲3類

  • 級別0:盡力而爲。消息發送者會想盡辦法發送消息,但是遇到意外並不會重試。
  • 級別1:至少一次。消息接收者如果沒有知會或者知會本身丟失,消息發送者會再次發送以保證消息接收者至少會收到一次,當然可能造成重複消息。
  • 級別2:恰好一次。保證這種語義肯待會減少併發或者增加延時,不過丟失或者重複消息是不可接受的時候,級別2是最合適的。

6. broker 服務器: mosquitto  客戶端 paho-mqtt

mqtt python 客戶端使用方法
Client(client_id=””, clean_session=True, userdata=None, protocol=MQTTv311, transport=”tcp”)

client_id是唯一字段,使用connect 建立連接

connect(host, port=1883, keepalive=60, bind_address="")  # 封裝了請求連接報文

發佈推送

publish(topic, payload=None, qos=0, retain=False)  # retain 是在報文控制頭的flag中, qos是服務質量設置

訂閱話題

subscribe(topic, qos=0) 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章