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: 0x0123Payload:- "22.5" (表示温度值为 22.5 度)// 转换为二进制(简化表示,非直接可读二进制格式)Fixed Header: 0x32 <Length>Variable Header: "sensor/temperature" 0x0123Payload: "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 报文中的报文标识符相匹配。

例程

PUBACKFixed Header:- Type: 0x04 (PUBACK)- Reserved: 0- Remaining Length: 0x02 (因为只包含一个 2 字节的报文标识符)Variable Header:- Packet Identifier: 0x0123 (与确认的 PUBLISH 报文中的报文标识符相同)// 转换为二进制(简化表示,非直接可读二进制格式)Fixed Header: 0x42Variable Header: 0x0123// 注意:没有有效载荷

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/47533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

One-Class SVM

前提知识&#xff1a;支持向量机&#xff08;SVM&#xff09;-CSDN博客 主要思想 找一个超平面将样本中的正例圈出来&#xff0c;预测就是用这个超平面做决策&#xff0c;在圈内的样本就认为是正样本&#xff0c;圈外的是其他样本&#xff0c;如图1所示&#xff1a; 图1 OSVM…

完整创建一个vite前端项目

目录 1.先创建一个vite项目 2.下载第三方依赖 ① 安装路由vue-router ② 安装vuex全局数据管理 ③ 安装element-plus ④ 安装element-plus图标 ⑤ 安装axios发送请求 ⑥ 完整main.js代码模板 3.开发组件 4.登陆页面开发用例 5. 完整项目代码 废话少说&#xff0c;直接…

【C#】| 与 及其相关例子

按位或&#xff08;|&#xff09; 按位或运算符 | 对两个数的每一位进行比较&#xff0c;如果两个数中至少有一个为 1&#xff0c;则结果位为 1&#xff1b;否则&#xff0c;结果位为0。 1010 (10 in decimal) | 1100 (12 in decimal) ------1110 (14 in decimal) 力扣相关…

【MySQL进阶之路 | 高级篇】EXPLAIN的进一步使用

1. EXPLAIN的四种输出格式 EXPLAIN可以输出四种格式&#xff1a;传统格式&#xff0c;JSON格式&#xff0c;TREE格式以及可视化输出。用户可以根据需要选择使用于自己的格式。 1). 传统格式 传统格式简单明了&#xff0c;输出是一个表格形式。 2). JSON格式 第一种格式中介…

联合体(union)的定义以及如何与结构体(struct)不同

联合体&#xff08;Union&#xff09;是一种特殊的数据类型&#xff0c;它允许在相同的内存位置存储不同的数据类型。但是&#xff0c;在任何给定的时间点&#xff0c;联合体只能存储其中的一个值&#xff1b;这意味着联合体的大小是其最大成员的大小&#xff0c;因为它必须足够…

分析Java中的@Transactional(readOnly = true)的作用(附Demo)

目录 前言1. 基本知识2. 性能对比 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 而对于Transactional的基本知识可看…

jstl是什么?

JSTL&#xff08;JavaServer Pages Standard Tag Library&#xff0c;Java 服务器页面标准标签库&#xff09;是一组用于简化 JSP 页面开发的标准标签和函数库。它提供了一组自定义的标签&#xff0c;使得开发者可以在 JSP 页面中使用这些标签来完成常见的任务&#xff0c;如条…

面向对象练习题

代码&#xff1a; public class LL {public static void main(String[] args) { Teacher tnew Teacher("Mike",32,"前端页面",20000);Professor P new Professor("Jack",58,"嵌入式开发",20000);pro p new pro("Bob",34,&q…

验证环境中uvm_error的使用

基本概念 作用&#xff1a;uvm_error 用于在验证过程中当发现不符合预期的情况时&#xff0c;生成并输出错误消息&#xff0c;帮助验证工程师快速定位和解决问题。语法&#xff1a;其基本语法为 uvm_error(ID, Message);&#xff0c;其中 ID 是一个唯一标识符&#xff0c;用于…

Leetcode热题100 Day4

开始做到二叉树了&#xff0c;前面的题全部用递归就能解决。 三十三、将有序数组转换为平衡二叉搜索树 二叉搜索树是左子树的值全小于根节点&#xff0c;右子树的值全大于根节点。二叉搜索树的中序遍历即为有序数组。但是有序数组和二叉搜索树是一一对应的吗&#xff1f;答案…

【规范】小程序发布,『小程序隐私保护指引』填写指南

前言 &#x1f34a;缘由 『小程序隐私保护指引』小程序发布&#xff0c;每次都躲不开&#xff01; &#x1f3c0;事情起因&#xff1a; 最近在帮朋友弄一个小项目&#xff0c;uniappunicloud壁纸小程序。虽然之前做过不少小程序&#xff0c;但是每次发布正式版本时都有一步『…

python入门课程Pro(2)--循环

循环 第1课 for循环的基本操作1.循环2.遍历3.for 循环遍历字典&#xff08;1&#xff09; 遍历字典的键(2)遍历字典的值(3)遍历字典的键和值 4.练习题&#xff08;1&#xff09;班级成绩单&#xff08;2&#xff09;最出名的城市&#xff08;3&#xff09;修改成绩&#xff08;…

WSL的安装

&#x1f3bc;个人主页&#xff1a;金灰 &#x1f60e;作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持&#xff01;❤️ &#x1f34a;易编橙终身成长社群&#…

Python--递归与非递归遍历文件夹的方法

递归概念 递归是一种编程技术&#xff0c;允许函数调用自身来解决问题。设计递归函数时&#xff0c;需要考虑基本情况和递归步骤。 递归函数设计 基本情况&#xff1a;递归结束的条件。递归步骤&#xff1a;函数调用自身解决更小的子问题。 递归方法实现 import osdef get…

网络初识和网络编程(Java版)

前言 网络已经成为我们日常生活中不可分割的一部分&#xff0c;我们每天都会从网络上得到各种各样的信息&#xff0c;我们也会在网络上传播各种各样的信息&#xff0c;可以说我们使用的软件都是依赖于网络的。作为一个程序猿&#xff0c;在我们未来部署的软件中&#xff0c;客…

【存储学习笔记】1:机械硬盘(Hard Drive Disk)结构和寻址方式

目录 HDD的结构HDD的寻址方式CHS寻址&#xff08;不适用于等密度结构磁盘&#xff09;LBA寻址&#xff08;目前普遍使用的线性寻址方式&#xff09; HDD的寻址速度 HDD的结构 盘面&#xff08;Platter&#xff09;&#xff1a;单面或者双面覆盖着用于记录数据的磁性物质&#x…

《昇思25天学习打卡营第25天|第23天》

今天是打卡的第二十三天&#xff0c;今天学习的是应用实践篇中的计算机视觉中FCN图像语义分割。 首先&#xff0c;是对全卷积网络&#xff08;FCN&#xff09;的简介&#xff0c;语义分割的简介&#xff0c;模型简介&#xff08;1、卷积化&#xff0c;2、上采样&#xff0c;3、…

OpenStack中nova的架构

1.1 nova-api 负责接收和相应客户的API调用。 1.2 compute core nova-schedule 负责决定在哪个计算节点运行虚拟机。 nova-compute 通过调用Hypervisor实现虚拟机生命周期的管理。一般运行在计算节点。 hypervisor 对虚拟机进行硬件虚拟化的管理软件&#xff…

初级java每日一道面试题-2024年7月21日-Collection和Collections的区别

面试官: Collection和Collections的区别? 我回答: 一、定义与功能 Collection 定义&#xff1a;Collection是Java集合框架中的一个基本接口&#xff0c;它代表了一组对象&#xff08;也称为元素&#xff09;的集合。它是List、Set等集合的父接口&#xff0c;定义了集合操作的…

Kali Linux APT 设置指南:如何控制软件包更新行为

在我浏览 CSDN 的问答社区时&#xff0c;我发现一篇求助内容是一位用户对于如何在使用 APT 更新时避免更新 Arduino 这个问题感到困惑。这激发了我写这篇博客的灵感。我希望通过这篇文章&#xff0c;帮助那些在 Kali Linux 上使用 APT 管理软件包更新的朋友们&#xff0c;特别是…