1. 程式人生 > >mqtt網絡協議筆記

mqtt網絡協議筆記

條件 ref htm 重復 tsd 其它 允許 中介 發布

1:MQTT采用代理的發布/訂閱的方式實現了發布者/訂閱者這種方式的網絡連接,MQTT協議中有三種角色:代理服務器、發布者客戶端、訂閱者客戶端,其中發布者客戶端和訂閱者客戶端互不幹擾。它們都是只知道代理服務器的存在,代理服務器負責將發布者的消息進行存儲處理並將這些消息發送到正確的訂閱者中去。

2:代理服務器:代理服務器可以是一個程序或者設備,作為發送消息的客戶端和請求訂閱的客戶端之間的中介。其主要作用是接收發布者客戶端發布的應用信息,然後將信息轉發給符合條件的訂閱者客戶端。

3:客戶端:客戶端指使用MQTT協議的程序或設備。客戶端包括發布者客戶端和訂閱者客戶端,同一個客戶端可以即是發布者也是訂閱者。客戶端可以發布消息給其它相關客戶端,也可以訂閱其它客戶端發布的消息。MQTT官方提供了Client SDK,可以幫助客戶快速開發MQTT客戶端。

4:主題:MQTT通過“主題”實現將消息從發布者客戶端送達至接收者客戶端。“主題”是附加在應用消息上的一個標簽,發布者客戶端將“主題”和“消息”發送至代理服務器,代理服務器將該消息轉發至每一個訂閱了該“主題”的訂閱者客戶端,一個主題名可以由多個主題層級組成,每一層通過“/”斜杠分隔開,訂閱者客戶端A將主題過濾器設置為“baidu/F1”;訂閱者客戶端B將主題過濾器設置為“baidu/F2”。發布者客戶端向“baidu/F1”發布消息,因此只有訂閱者客戶端A可以接收到該消息。

5:通配符:如果用戶需要一次訂閱多個具有類似結構的主題,可以在主題過濾器中包含通配符。通配符只可用在主題過濾器中,在發布應用消息時的主題名不允許包含通配符,主題通配符有兩種:

(1)#:表示匹配>=0個層次,比如a/#就匹配a/b,a/b/c(不能匹配a/,後面必須有其它主題)。單獨的一個#表示匹配所有,不允許a#或a/#/c等形式。

(2)+:表示匹配一個層次,例如a/+匹配a/b,a/c,不匹配a/b/c。單獨的一個+是允許的,但a+為非法形式。

6:服務質量:對傳輸消息有三種服務質量(QoS):

(1) 最多一次,這一級別會發生消息丟失或重復,消息發布依賴於底層TCP/IP網絡。即:<=1

(2) 至多一次,這一級別會確保消息到達,但消息可能會重復。即:>=1

(3) 只有一次,確保消息只有一次到達。即:=1。在一些要求比較嚴格的計費系統中,可以使用此級別

個人理解:這種代理服務器的方式避免了服務端/客戶端之間連接後傳輸數據的情況,訂閱者客戶端和發布者客戶端之間互不相關。

mqtt網絡協議筆記