学习客户端如何实现发布信息、订阅主题以及如何取消订阅主题
(一)PUBLISH - 发布消息
MQTT客户端在发布消息的时候,会向服务端发送PUBLISH报文。
- packetId - 报文标识符
- 报文标识符可用于对MQTT报文进行标识。不同的MQTT报文的标识符不同。MQTT设备可以通过不同的标识符对MQTT报文进行甄别和管理。
- 只有QoS级别大于0时,报文标识符才是非零值。如果QoS等于0,则报文标识符为0。
- topicName - 主题名
- 主题名用于识别此信息应该发布到哪一个主题。
- QoS - 服务质量等级
- 表示MQTT消息的服务质量等级,共有三个几级别:0、1、2。
- QoS决定了MQTT通讯有什么样的服务保证。
- retainFlag - 保留标志
- 在默认情况下,客户端在订阅了一个新的主题之后,并不会马上接收到该主题的信息。只有在客户端订阅了主题之后,服务端接收到该主题的新消息时,服务端才会将最新接收到的该主题的信息推送到客户端。
- 但在某些情况下,我们需要客户端在订阅某一主题后马上接收到一条该主题的信息。这时候就需要用到保留标志这一信息。
- payload - 有效载荷
- 有效载荷是我们希望客户端发布的实际内容。我们可以使用MQTT协议发送文本,图像等格式的内容。
- dupFlag - 重发标志
- 当MQTT报文的接收方没有及时的确认收到报文时,发送方会重复发送MQTT报文。
- 在重复发送MQTT报文时,发送方会将此重发标志设置为“true”。
- 注意,重发标志只有当QoS级别大于0时使用。
(二)SUBSCRIBE - 订阅主题
- 客户端想要订阅主题,首先要向服务端发送主题订阅请求。客户端通过向服务端发送SUBSCRIBE报文来实现这一请求。
- 一个SUBSCRIBE报文可以包含有单个或者多个订阅主题名。也就是说,一个SUBSCRIBE报文可以用于订阅一个或者多个主题。
- 每一个SUBSCRIBE报文还包含有“报文标识符”,报文标识符可以用于对MQTT报文进行标志。不同的MQTT报文所拥有的标识符不同。
(三)SUBACK - 订阅确认
当服务端接收到客户端的订阅报文之后,会向客户端发送SUBACK报文确认订阅。SUBACK报文包含有:订阅返回码、报文标识符。
- returnCode(订阅返回码)
- 客户端可以通过一个SUBSCRIBE报文发送多个主题的订阅请求,服务端会针对SUBSCRIBE报文中所有订阅主题来注意回复给客户端一个返回码。
- 这个返回码是用来告知客户端是否成功订阅了主题。
返回码 | Return Code Response |
---|---|
0 | 订阅成功 - QoS 0 |
1 | 订阅成功 - QoS 1 |
2 | 订阅成功 - QoS 2 |
128 | 订阅失败 |
- packetId(报文标识符)
- MQTT设备通过报文标识符对报文进行管理。
(四)UNSUBSCRIBE - 取消订阅
当客户端要取消订阅某主题时,可以通过向服务端发送UNSUBSCRIBE报文来进行取消订阅。
UNSUBSCRIBE报文包含两个重要信息,一个时取消订阅的主题名称,一个是报文标识符。
- topic* - 取消订阅主题
- 同一个UNSUBSCRIBE报文可以同时包含多个取消订阅的主题名称。
- packetId - 报文标识符
- MQTT设备可以通过该标识符对报文进行管理。