发布可以使客户端发送给服务端,也可以是服务端发送给客户端。当一个客户端A想发布一条消息时,它应该先把这条消息发布给服务端,然后由服务端作为代理将该条消息发布给所有订阅消息主题的客户端们。
一、场景示意图
二、协议简述
在QoS0的发布中,接收者无须对接收到的发布报文进行回应。这样可以节省时间开销,但是如果网络连接不稳定等状况下很有可能导致发布的消息丢失,所以QoS0也被称为至多一次。
- 固定报文头。第一个字节是
控制报文标识符
,紧接着的字节为报文的剩余长度
,这个剩余长度是不包含固定报文头的。第一个字节的每个位的含义如下。
0位是该消息是否保留,1位有效,0代表不保留;
1~2为QoS等级,有效大小为0~2;
3是是否重复标识,当QoS大于0时才有作用,QoS为0时该位必须为0。代表当发布一条重复的消息时,该位需要设置为1以提示接收者这条消息可能已经发送过;
4~7是控制报文标识。
- 主题长度。共两个字节,MSB,LSB。用来标识发布的主题的长度大小;
- 主题。即发布的消息归属的主题;
- 消息标识符。该字段只有当QoS为1和2时才能出现;
- 消息的内容。也就是发布到该主题的内容。
在QoS为0时,接收者不必对发布消息进行回应。