目录
4.1 PINGREQ - 心跳请求
客户端发送PINGREQ报文给服务端的。用于:
- 在没有任何其它控制报文从客户端发给服务的时,告知服务端客户端还活着。
- 请求服务端发送 响应确认它还活着。
- 使用网络以确认网络连接没有断开。
PINGREQ 与 CONNECT 可变报头中的 保持连接 Keep Alive 字段有非常大的关联。
保持连接(Keep Alive)是一个以秒为单位的时间间隔,表示为一个16位的字,它是指在客户端传输完成一个控制报文的时刻到发送下一个报文的时刻,两者之间允许空闲的最大时间间隔。客户端负责保证控制报文发送的时间间隔不超过保持连接的值。如果没有任何其它的控制报文可以发送,客户端必须发送一个PINGREQ报文。
不管保持连接的值是多少,客户端任何时候都可以发送PINGREQ报文,并且使用PINGRESP报文判断网络和服务端的活动状态。
如果保持连接的值非零,并且服务端在一点五倍的保持连接时间内没有收到客户端的PINGREQ控制报文,它必须断开客户端的网络连接,认为网络连接已断开。
客户端发送了PINGREQ报文之后,如果在合理的时间内仍没有收到PINGRESP报文,它应该关闭到服务端的网络连接。
保持连接的实际值是由应用指定的,一般是几分钟。允许的最大值是18小时12分15秒。
PINGREQ 只有固定报头字段,且报文长度只有 2 字节。
4.1.1 固定报头
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
byte 1 | MQTT 报文的类型(12 - PINGREQ) | Reserved 保留位 | ||||||
12,0xC - PINGREQ | 0 | 0 | 0 | 0 | ||||
byte 2 | 剩余长度 | |||||||
0x00 |
PINGREQ 只有固定报头字段,且报文长度只有 2 字节。
PINGREQ 没有 可变报头 字段。
PINGREQ 没有 有效载荷 字段。
响应:服务端必须发送 PINGRESP报文响应客户端的PINGREQ报文。
4.2 PINGRESP - 心跳响应
服务端发送PINGRESP报文响应客户端的PINGREQ报文。表示服务端还活着。
4.2.1 固定报头
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
byte 1 | MQTT 报文的类型(13 - PINGRESP) | Reserved 保留位 | ||||||
13,0xD - PINGRESP | 0 | 0 | 0 | 0 | ||||
byte 2 | 剩余长度 | |||||||
0x00 |
PINGRESP 只有固定报头字段,且报文长度只有 2 字节。
PINGRESP 没有 可变报头 字段。
PINGRESP 没有 有效载荷 字段。