1、PUBLISH发布消息
客户端与服务器建立连接之后,客户端开始向服务器发送数据,这个数据即通过PUBLISH数据包进行,但是PUBLISH按照Qos的等级服务器的响应有所不同,Qos等级越高响应越复杂,同时数据可靠性越高。
表1 PUBLISH发布消息包数据内容
PUBLISH控制包 结构 | 固定包头 | 控制包类型 bit[7-4] | PUBLISH连接类型 | bit[7-4] 0x03<<4 |
特殊标识 bit[3-0] | DUP flag | bit3 | ||
QoS level | bit[2-1] | |||
RETAIN | bit0 | |||
剩余长度 | (Remaining Length) | |||
可变包头 | 话题名 | 应用决定(Length MSB,Length LSB,Data) | ||
包唯一标识(2byte) | QoS等级为1或2的PUBLISH包中存在 | |||
载荷 | 应用消息 | 应用决定(Data) |
响应说明:
服务器根据不同的Qos Level返回数据。
响应表:
QoS Level | Expected Response |
0 | None |
1 | PUBACK Packet |
2 | PUBREC Packet |
响应框图说明:
不同Qos值,服务器与客户端的数据交互。
2、数据调试(QOS=0):
客户端发送当Qos=0的PUBLISH数据包。
客户端的Qos=0的信息
服务器接收到客户端的Qos=0的信息
收到数据:31 18 00 02 39 30 7B 0A 20 20 22 6D 73 67 22 3A 20 22 68 65 6C 6C 6F 22 0A 7D
将收到的数据带入表格,查看具体的含义。
PUBLISH控制包 结构 | 固定包头 | 控制包类型 bit[7-4] | PUBLISH连接类型 | bit[7-4] 0x03<<4 | 0x31 | 0x30 |
特殊标识 bit[3-0] | DUP flag | bit3 | 0 | |||
QoS level | bit[2-1] | 0 | ||||
RETAIN | bit0 | 1 | ||||
剩余长度 | (Remaining Length) | 0x18 | ||||
可变包头 | 话题名 | 应用决定(Length MSB,Length LSB,Data) | 00 02 | 长度为2byte | ||
39 30 | 话题名称为:90 | |||||
包唯一标识(2byte) | QoS等级为1或2的PUBLISH包中存在 | 无 | 当前QoS=0所以无 | |||
载荷 | 应用消息 | 应用决定(Data) | 7B 0A 20 20 22 6D 73 67 22 3A 20 22 68 65 6C 6C 6F 22 0A 7D | 应用消息为: { "msg": "hello" } |
3、数据调试(QOS=1):
客户端发送当Qos=1的PUBLISH数据包。
客户端的Qos=1的信息
服务器接收到客户端的Qos=1的信息
收到数据:33 1A 00 02 39 30 84 B4 7B 0A 20 20 22 6D 73 67 22 3A 20 22 68 65 6C 6C 6F 22 0A 7D
将收到的数据带入表格,查看具体的含义。
PUBLISH控制包 结构 | 固定包头 | 控制包类型 bit[7-4] | PUBLISH连接类型 | bit[7-4] 0x03<<4 | 0x33 | 0x30 |
特殊标识 bit[3-0] | DUP flag | bit3 | 0 | |||
QoS level | bit[2-1] | 1 | ||||
RETAIN | bit0 | 1 | ||||
剩余长度 | (Remaining Length) | 0x1A | ||||
可变包头 | 话题名 | 应用决定(Length MSB,Length LSB,Data) | 00 02 | 长度为2bit | ||
39 30 | 话题名称为:90 | |||||
包唯一标识(2byte) | QoS等级为1或2的PUBLISH包中存在 | 84 B4 | 当前QoS=1所以有。服务器返回数据中将用到。 | |||
载荷 | 应用消息 | 应用决定(Data) | 7B 0A 20 20 22 6D 73 67 22 3A 20 22 68 65 6C 6C 6F 22 0A 7D | 应用消息为: { "msg": "hello" } |