02.25 MQTT協議解析之PUBREC和PUBREL以及PUBCOMP報文


MQTT協議解析之PUBREC和PUBREL以及PUBCOMP報文

題目

大家好,超子又和大家見面了,超子我能力有限,水平不高,有什麼錯誤的地方,歡迎板磚。超子今天給大家介紹一下PUBREC、PUBREL和PUBCOMP這3個報文。

MQTT協議解析之PUBREC和PUBREL以及PUBCOMP報文

PUBREC、PUBREL和PUBCOMP報文

PUBREC、PUBREL和PUBCOMP這3個報文是一個整體,涉及到等級2的兩次確認,我們要整體的理解它們。這3個報文,都是雙向的。

發佈時:我們給服務器發送等級2的PUBLISH報文,服務器需要2次確認我們的數據

推送時:服務器發送給我們等級2的PUBLISH報文,我們需要2次確認服務器的數據

我們就以發佈這個方向來看這幾個報文的用法。

MQTT協議解析之PUBREC和PUBREL以及PUBCOMP報文

PUBREC報文固定報頭

首先看PUBREC報文,上圖是PUBREC報文的固定報頭格式。用於第一次確認等級2的PUBLISH報文,結構簡單,固定報頭2個字節 0x50 0x02,可變報頭2個字節的報文標識符。假設我們發送的等級2的PUBLISH報文使用0x00 0x08的報文標識符,那麼PUBREC報文由服務器回覆我們,表示第1次確認簽收,應該回0x50 0x02 0x00 0x08。

MQTT協議解析之PUBREC和PUBREL以及PUBCOMP報文

PUBREL報文固定報頭

然後看PUBREL報文,當我們收到PUBREC報文時,必須馬上發送PUBREL報文,啟動再次問詢,PUBREL報文結構也很簡單,看上圖固定報頭結構,固定報頭2字節0x62 0x02,可變報頭2個字節的報文標識符,要保持一致,還是0x00 0x08。所以我們發送0x62 0x02 0x00 0x08給服務器。

MQTT協議解析之PUBREC和PUBREL以及PUBCOMP報文

PUBCOMP報文固定報頭

然後看PUBCOMP報文,服務器的第2次確認,結構很簡單,固定報頭2個字節 0x70 0x02。報文標識符是0x00 0x08。所以當收到0x70 0x02 0x00 0x08的PUBCOMP報文後,整個等級2的PUBLISH報文發送才算完成,如果2次確認過程中,任何一個報文的發送和接收失敗或是間隔時間太長,都會造成等級2的PUBLISH報文發送失敗,然後需要啟動重發。比如我們收到服務器回覆的PUBREC報文,是第1次確認,這時我們應該馬上發送PUBREL報文,啟動2次問詢,如果我們間隔長一點時間在發送PUBREL報文,服務器就不會回應我們了,服務器將會啟動重發過程。

到此MQTT的14個報文,超子都給大家介紹完了,後面超子就要介紹如何使用HTTP協議對接阿里雲平臺了。


分享到:


相關文章: