概述
文章目录
- 发布、订阅和取消订阅
- 1 PUBLISH – 发布消息
- 1.1 topicName – 主题名
- 1.2 QoS – 服务质量等级
- 1.3 packetId – 报文标识符
- 1.4 retainFlag – 保留标志
- 1.5 Payload – 有效载荷
- 1.6 dupFlag – 重发标志
- 2 SUBSCRIBE – 订阅主题
- 3 SUBACK – 订阅确认
- 4 UNSUBSCRIBE – 取消订阅
发布、订阅和取消订阅
重点讲解以下MQTT报文:
- PUBLISH – 发布信息
- SUBSCRIBE – 订阅主题
- SUBACK – 订阅确认
- UNSUBSCRIBE – 取消订阅
1 PUBLISH – 发布消息
MQTT客户端
一旦连接到服务端
,便可以发布消息
。 每条发布的MQTT消息必须包含一个主题
。MQTT服务器可以通过主题确定将消息转发给哪些客户端。(注:这里的消息指的是MQTT报文。)
MQTT客户端发布消息时,会向服务端发送PUBLISH报文。以下是PUBLISH报文的详细信息。
上图左侧栏中的内容是PUBLISH报文所包含的信息名称。右侧是信息的具体内容。
1.1 topicName – 主题名
主题名用于识别此信息应发布到哪一个主题。
1.2 QoS – 服务质量等级
QoS
(Quality of Service)表示MQTT消息的服务质量等级
。QoS有三个级别:0
、1
和2
。QoS决定MQTT通讯有什么样的服务保证。有关QoS的详细信息我们会在后续课程中详细讲解。
1.3 packetId – 报文标识符
报文标识符
可用于对MQTT报文进行标识。不同的MQTT报文所拥有的标识符不同。MQTT设备可以通过该标识符对MQTT报文进行甄别和管理。注:报文标识符的内容与QoS级别有密不可分的关系。只有QoS级别大于0时,报文标识符才是非零数值。如果QoS等于0,报文标识符为0。
1.4 retainFlag – 保留标志
在默认情况下,当客户端订阅了某一主题后,并不会马上接收到该主题的信息。只有在客户端订阅该主题后,服务端接收到该主题的新信息时,服务端才会将最新接收到的该主题信息推送给客户端。
但是在有些情况下,我们需要客户端在订阅了某一主题后马上接收到一条该主题的信息。这时候就需要用到
保留标志
这一信息。关于保留标志的具体使用方法,我们将在本教程的后续部分进行详细讲解。
1.5 Payload – 有效载荷
有效載荷
是我们希望通过MQTT所发送的实际内容
。我们可以使用MQTT协议发送文本,图像等格式的内容。这些内容都是通过有效載荷所发送的。
1.6 dupFlag – 重发标志
当MQTT报文的接收方没有及时确认收到报文时,发送方会重复发送MQTT报文。在重复发送MQTT报文时,发送方会将此“
重发标志
”设置为true
。请注意,重发标志只在QoS级别大于0时使用。有关QoS的详细信息,我们将会在后续教程中为您做详细介绍。
2 SUBSCRIBE – 订阅主题
当客户端连接到服务端后,除了可以
发布消息
,也可以接收消息
。我们在之前的课程讲过,所有MQTT消息都有主题
。客户端要想接收消息,首先要订阅
该消息的主题。这样,当有客户端向该主题发布消息后,订阅了该主题的客户端就能接收到消息了。
客户端要想
订阅主题
,首先要向服务端发送主题订阅请求。客户端是通过向服务端发送SUBSCRIBE
报文来实现这一请求的。该报文包含有一系列“订阅主题名”。请留意,一个SUBSCRIBE
报文可以包含有单个或者多个订阅主题名。也就是说,一个SUBSCRIBE
报文可以用于订阅一个或者多个主题。
在以上PUBLISH报文讲解中,我们曾经提到过QoS(服务质量等级)这一概念。同样的,客户端在订阅主题时也可以明确QoS。服务端会根据SUBSCRIBE中的QoS来提供相应的服务保证。
另外每一个SUBSCRIBE报文还包含有“报文标识符”。报文标识符可用于对MQTT报文进行标识。不同的MQTT报文所拥有的标识符不同。MQTT设备可以通过该标识符对MQTT报文进行甄别和管理。
3 SUBACK – 订阅确认
服务端接收到客户端的订阅报文后,会向客户端发送
SUBACK
报文确认订阅。
SUBACK报文包含有“订阅返回码
”和“报文标识符
”这两个信息。
returnCode – 订阅返回码
客户端向服务端发送订阅请求后,服务端会给客户端返回一个订阅返回码。
在之前的讲解中我们说过,客户端可通过一个SUBSCRIBE报文发送多个主题的订阅请求。服务端会针对SUBSCRIBE报文中的所有订阅主题来逐一回复给客户端一个返回码。
这个返回码的作用是告知客户端是否成功订阅了主题。以下是返回码的详细说明。
请留意,如上表所示,针对不同的主题订阅QoS,服务端的返回码会有所不同。
另外每一个SUBACK报文也包含有“报文标识符”。MQTT设备可以通过该标识符对报文进行管理。
4 UNSUBSCRIBE – 取消订阅
顾名思义,当客户端要取消订阅某主题时,可通过向服务端发送
UNSUBSCRIBE
– 取消订阅报文来实现。
以上示意图显示,UNSUBSCRIBE
报文包含两个重要信息,第一个是取消订阅
的主题名称。同一个UNSUBSCRIBE
报文可以同时包含多个取消订阅的
主题名称。另外,UNSUBSCRIBE
报文也包含“报文标识符
”,MQTT设备可以通过该标识符对报文进行管理。
当服务端接收到UNSUBSCRIBE
报文后,会向客户端发送取消订阅确认报文
– UNSUBACK
报文。该报文含有客户端所发送的“取消订阅报文标识符
”。
客户端接收到UNSUBACK
报文后就可以确认取消主题订阅已经成功完成了。
内容来自 -----> 太极创客
详情可见太极创客官网,内有Arduino、ESP32等详细教程
最后
以上就是虚幻芒果为你收集整理的【MQTT基础篇(五)】发布、订阅和取消订阅发布、订阅和取消订阅的全部内容,希望文章能够帮你解决【MQTT基础篇(五)】发布、订阅和取消订阅发布、订阅和取消订阅所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复