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协议对接阿里云平台了。


分享到:


相關文章: