MQTT 协议中 PUBLISH 和 PUBACK 介绍

MQTT 协议中 PUBLISH 和 PUBACK 介绍

1. PUBLISH 命令

功能

PUBLISH 命令用于从客户端向服务端(或反向)传输一个应用消息。它是 MQTT 协议中用于消息发布的核心命令。

语法

PUBLISH 报文由以下部分组成:

  • 固定报头(Fixed Header):包含报文类型(0x03),DUP 标志(是否重复发送),QoS 等级(0, 1, 或 2),RETAIN 标志(是否保留消息),以及剩余长度(Remaining Length,表示可变报头和有效载荷的总长度)。
  • 可变报头(Variable Header):包含主题名(Topic Name)和(当 QoS > 0 时)报文标识符(Packet Identifier)。
  • 有效载荷(Payload):包含应用消息的实际内容。

参数

  • 主题名(Topic Name):UTF-8 编码的字符串,用于标识消息要发布到的主题。
  • QoS 等级
    • 0:最多分发一次。
    • 1:至少分发一次。
    • 2:仅分发一次。
  • RETAIN 标志:如果设置为 1,则服务器会保留这个消息,以便它可以被新订阅了该主题的客户端获取。
  • 报文标识符(Packet Identifier)(当 QoS > 0 时):用于在 QoS 1 和 QoS 2 的情况下,确保消息的可靠传输和处理。
  • 有效载荷:实际要发布的应用消息数据。

例程

PUBLISH (QoS 1)

Fixed Header:

- Type: 0x03 (PUBLISH)

- DUP: 0

- QoS: 0x01 (QoS 1)

- RETAIN: 0

- Remaining Length: 根据后续内容计算



Variable Header:

- Topic Name: "sensor/temperature"

- Packet Identifier: 0x0123



Payload:

- "22.5" (表示温度值为 22.5 度)



// 转换为二进制(简化表示,非直接可读二进制格式)

Fixed Header: 0x32 <Length>

Variable Header: "sensor/temperature" 0x0123

Payload: "22.5"

注意:<Length> 是剩余长度的实际计算值,它基于主题名长度、报文标识符长度和有效载荷长度的总和。

2. PUBACK 命令

功能

PUBACK 命令是服务端(或客户端,在 QoS 1 的反向通信中)对客户端发送的 QoS 1 等级的 PUBLISH 报文的接收确认。

语法

PUBACK 报文由以下部分组成:

  • 固定报头(Fixed Header):包含报文类型(0x04),保留位(必须为 0),以及剩余长度(Remaining Length,对于 PUBACK,这通常是 2,因为只包含一个报文标识符)。
  • 可变报头(Variable Header):包含报文标识符(Packet Identifier),与确认的 PUBLISH 报文中的报文标识符相同。

参数

  • 报文标识符(Packet Identifier):与确认的 QoS 1 等级的 PUBLISH 报文中的报文标识符相匹配。

例程

PUBACK

Fixed Header:

- Type: 0x04 (PUBACK)

- Reserved: 0

- Remaining Length: 0x02 (因为只包含一个 2 字节的报文标识符)



Variable Header:

- Packet Identifier: 0x0123 (与确认的 PUBLISH 报文中的报文标识符相同)



// 转换为二进制(简化表示,非直接可读二进制格式)

Fixed Header: 0x42

Variable Header: 0x0123



// 注意:没有有效载荷

这两个例程展示了 MQTT 协议中 PUBLISH 和 PUBACK 报文的基本用法和结构。在实际应用中,这些报文会通过 TCP/IP 连接在客户端和服务端之间传输。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值