MQTT的消息体
flag
此标志设置时,客户端或服务器尝试重新publish,PUBREL,subcribe或unsubscribe消息。这适用于消息,
其中的QoS的值大于零(0),并且需要确认。当DUP位被设置,所述其头部包含一个消息ID。
QoS
- QoS=0:最多一次,有可能重复或丢失。
- QoS=1:至少一次,有可能重复。
- Client[Qos=1,DUP=0/重复次数/,MessageId=x] --->PUBLISH--> Server收到后,存储Message,发布,删除,向Client回发PUBACKClient收到PUBACK后,删除Message;如果未收到PUBACK,设置DUP++,重新发送,Server端重新发布,所以有可能重复发送消息。
-
QoS=2:只有一次,确保消息只到达一次(用于比较严格的计费系统)。
Message Type
CONECT
- TCP连接建立完毕后,Client向Server发出一个Request。
- 如果一段时间内接收不到Server的Response,则关闭socket,重新建立一个session连接
- 如果一个ClientID已经与服务器连接,则持有同样ClientID的旧有连接必须由服务器关闭后,新建立才能建立。
CONNACK Server发出Response响应。
- 0x00 Connection Accepted
- 0x01 Connection Refused: unacceptable protocol version
- 0x02 Connection Refused: identifier rejected
- 0x03 Connection Refused: server unavailable
- 0x04 Connection Refused: bad user name or password
-
0x05 Connection Refused: not authorized
PUBLISH 发送消息
Client/Servier均可以进行PUBLISH。
publish message 应该包含一个TopicName(Subject/Channel),即订阅关键词