mqtt session保持 订阅消息_MQTT系列 | MQTT消息的发布和订阅

本文详细介绍了MQTT协议的发布(PUBLISH)和订阅(SUBSCRIBE)过程,包括PUBLISH数据包的结构,如DUP flag、QoS、Retain flag,以及SUBSCRIBE数据包的订阅列表和返回码。还探讨了如何使用Python的paho-mqtt库进行消息发布和订阅的实践操作。通过示例代码展示了发布消息、订阅与取消订阅的流程。
摘要由CSDN通过智能技术生成

1. MQTT的发布

MQTT发布中最重要的是PUBLISH数据包,PUBLISH数据包是用于sender和receiver之间传输消息数据的。当Publisher要向某个Topic发布一条消息的时候,Publisher会向Broker发送一个PUBLISH数据包;当Broker要将一条消息转发给订阅了某条主题的Subscriber时,Broker也会向该Subscriber发送一个PUBLISH数据包。因为PUBLISH传输过程中涉及到了QoS,Recevier收到sender的PUBLISH数据包之后会根据QoS的不同,还有后续不同的应答流程(只有当QoS为0时,Receiver不做任何应答),所以关于这个具体的流程,在QoS那一章节进行讲述。下面对PUBLISH数据包进行讲解:

1.1. PUBLISH数据包

1.1.1. 固定头

PUBLISH的固定头包含了一下内容:消息重复标识(DUP flag):1bit,0 或者 1,当 DUP flag = 1 的时候,代表该消息是一条重发消息,因 Receiver 没有确认收到之前的消息而重新发送的。这个标识只在 QoS 大于 0 的消息中使用。

QoS:2bit,0、1 或者 2,代表 PUBLISH 消息的 QoS level。

Retain 标识(Retain flag):1bit,0 或者 1。在从 Client 发送到 Broker 的 PUBLISH 消息中被设为 1 的时候,Broker 应该保存该条消息,当之后有任何新的 Subscriber 订阅 PUBLISH 消息中指定的主题时,都会先收到该条消息,这种消息也叫 Retained 消息。在从 Broker 发送到 Client 的 PUBLISH 消息中被设为 1 的时候,代表该条消息是一条 Retained 消息。

1.1.2. 可变头数据包标识( Packet Identifier):2字节,用来标识一个唯一数据包。数据包标识只需要保证在从 Sender 到 Receiver 的一次消息交互(比如发送、应答为一次交互)中保持唯一就好,只在QoS大于1的消息中使用,因为QoS大于1的消息有应答流程。

主题名称(Topic Name):主题名称是一个 UTF-8 编码的字符串,用来命名该消息发布到哪一个主题,Topic Name 可以是长度大于等于 1 任何一个字符串(可包含空格)。但是在实际项目中,我们最好还是遵循以下一些最优方法。主题名称应该包含层级,不同的层级用 / 划分。

主题名称开头不要使用/

不要在主题中使用空格

只使用ASCII字符

主题名称在可读的前提下尽量短

主题是大小写敏感的,“data”和“Data”是两个不同的主题

以$为开头的主题属于Broker预留的系统主题,通常用于发布Broker的内部统计信息,所以在自己定义时不要使用$开头的主题手法数据。

1.1.3. 消息体

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值