1. 程式人生 > >基於MQTT協議的 org.eclipse.paho.client.mqttv3 原始碼學習(一)

基於MQTT協議的 org.eclipse.paho.client.mqttv3 原始碼學習(一)

一、MQTT協議簡敘

MQTT 有以下特點:

  • 使用釋出/訂閱訊息模式,提供一對多的訊息釋出,解除應用程式耦合
  • 使用TCP/IP提供網路連線
  • 有三種釋出訊息服務質量
  • “至多一次 Qos level=0”,訊息釋出完全依賴底層 TCP/IP 網路。會發生訊息丟失或重複。這一級別可用於如下情況,環境感測器資料,丟失一次讀記錄無所謂,因為不久後還會有第二次傳送。
  • “至少一次Qos level=1”,確保訊息到達,但訊息重複可能會發生。
  • “只有一次Qos level=2”,確保訊息到達一次。這一級別可用於如下情況,在計費系統中,訊息重複或丟失會導致不正確的結果。
  • 小型傳輸,開銷很小(固定長度的頭部是 2 位元組),協議交換最小化,以降低網路流量。
  • 使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制。

        MQTT 限制:

  • MQTT協議傳輸內容格式目前只支援2中,一個為UTF-8和askii,傳輸的內容最大為256M
  • 目前用的比較多的基於MQTT協議的訊息伺服器mosquitto  socket 最大連線數僅5W左右。
  、MQTT報文型別  

MQTT訊息型別(4-7),使用4位二進位制表示,可代表16種訊息型別:

Mnemonic Enumeration Description
Reserved 0 Reserved
CONNECT 1 Client request to connect to Server
CONNACK 2 Connect Acknowledgment
PUBLISH 3 Publish message
PUBACK 4 Publish Acknowledgment
PUBREC 5 Publish Received (assured delivery part 1)
PUBREL 6 Publish Release (assured delivery part 2)
PUBCOMP 7 Publish Complete (assured delivery part 3)
SUBSCRIBE 8 Client Subscribe request
SUBACK 9 Subscribe Acknowledgment
UNSUBSCRIBE 10 Client Unsubscribe request
UNSUBACK 11 Unsubscribe Acknowledgment
PINGREQ 12 PING Request
PINGRESP 13 PING Response
DISCONNECT 14 Client is Disconnecting
Reserved 15 Reserved

0->保留 ;1->客戶端請求連線到伺服器;2->連線確認;3->釋出訊息;4->釋出確認;5->釋出收稿(有保證的交付第一部分);

6->出版發行(有保證的交付第二部分);7->釋出完整(有保證的交付第三部分);8->客戶端訂閱請求;9->訂閱確認;

10->客戶端退訂請求;11->退訂確認;12->ping請求;13->ping響應;14->客戶端埠;15->保留;

  、MQTT訊息釋出流程 

下圖是訊息的釋出和確認等一些流程,主要是跟訊息釋出者所設定的QoS level有關。

好了,MQTT協議大致介紹了一下,現在進入對原始碼的分析、

四、目錄分析 


org.eclipse.paho.client.mqttv3 :主要用於對外提供服務,此包裡提供的整個功能。

org.eclipse.paho.client.mqttv3.internal: 提供了對mqttv3 中的介面的實現。

org.eclipse.paho.client.mqttv3.internal.nls: 國際化相關檔案。學習中可以忽略

org.eclipse.paho.client.mqttv3.internal.security:MQTT支援SSL加密,這個包內實現了基於TLS協議SSLSocket;

org.eclipse.paho.client.mqttv3.internal.wire : MQTT協議中報文資訊,裡面包含有心跳包、訂閱包、釋出包、確認包等

org.eclipse.paho.client.mqttv3.persist:釋出資訊持久化類,MQTT提供兩種保持釋出訊息的方式,一種是將資訊保持到檔案中,

一種是直接保持 到 記憶體中。

org.eclipse.paho.client.mqttv3.util:工具類。

org.eclipse.paho.client.mqttv3.logging:日誌包

由此可以看出學習基於MQTT協議的paho,只需要啃下藍色部分包內的內容,基本上就全部掌握了。