5. MQTT消息类型详解(三)
9 SUBACK消息
9.1 消息结构
SUBACK消息是订阅确认消息,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
| 消息ID(2字节) |
+-------------------------------+
| 主题QoS等级(1字节) |
+-------------------------------+
9.2 使用场景
- 订阅确认:代理确认客户端的订阅请求,返回主题的QoS等级。
- 状态反馈:提供订阅成功或失败的反馈。
9.3 示例
消息类型:9
保留标志:0
QoS等级:0
消息剩余长度:4
消息ID:1
主题QoS等级:1
10 UNSUBSCRIBE消息
10.1 消息结构
UNSUBSCRIBE消息用于客户端向代理发送取消订阅请求,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
| 消息ID(2字节) |
+-------------------------------+
| 主题长度(2字节) |
+-------------------------------+
| 主题(字符串) |
+-------------------------------+
10.2 使用场景
- 取消订阅:客户端向代理发送取消订阅的主题请求。
- 更新订阅列表:支持动态取消订阅多个主题。
10.3 示例
消息类型:10
保留标志:0
QoS等级:0
消息剩余长度:6
消息ID:1
主题长度:6
主题:sensor/temperature
11 UNSUBACK消息
11.1 消息结构
UNSUBACK消息是取消订阅确认消息,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
| 消息ID(2字节) |
+-------------------------------+
11.2 使用场景
- 取消订阅确认:代理确认客户端的取消订阅请求。
- 状态反馈:提供取消订阅成功或失败的反馈。
11.3 示例
消息类型:11
保留标志:0
QoS等级:0
消息剩余长度:2
消息ID:1
12 PINGREQ消息
12.1 消息结构
PINGREQ消息是心跳请求消息,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
12.2 使用场景
- 心跳检测:客户端定期发送PINGREQ消息,检查代理是否在线。
- 保持连接:防止因网络不稳定而丢失连接。
12.3 示例
消息类型:12
保留标志:0
QoS等级:0
消息剩余长度:0
13 PINGRESP消息
13.1 消息结构
PINGRESP消息是心跳响应消息,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
13.2 使用场景
- 心跳响应:代理响应客户端的PINGREQ消息,确认连接状态。
- 连接保持:确保客户端和代理之间的连接保持活跃。
13.3 示例
消息类型:13
保留标志:0
QoS等级:0
消息剩余长度:0
14 DISCONNECT消息
11 消息结构
DISCONNECT消息用于客户端断开连接的请求,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
12 使用场景
- 连接断开:客户端主动请求断开与代理的连接。
- 清理资源:完成数据传输后,释放连接资源。
13 示例
消息类型:14
保留标志:0
QoS等级:0
消息剩余长度:0
本章详细介绍了MQTT协议中的各类消息类型,包括CONNECT、CONNACK、PUBLISH、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK、PINGREQ、PINGRESP和DISCONNECT。每种消息类型的结构和使用场景已经详细讲解,帮助开发者更好地理解和应用MQTT协议。
相关文章:
5. MQTT消息类型详解(三)
9 SUBACK消息 9.1 消息结构 SUBACK消息是订阅确认消息,格式如下: ------------------------------- | 消息类型(1字节) | ------------------------------- | 保留标志(1字节) …...
TypeScript JSX
介绍 在线的免费的代码转换器工具:可以把HTML 代码移植到 JSX 语法。还支持很多其他的转换。 JSX 是 ECMAScript 的一种类似 XML 的语法扩展,没有任何定义的语义。它不打算由引擎或浏览器实现。它并不是将 JSX 纳入 ECMAScript 规范本身的提议。它旨在供…...
java里的序列化反序列化、HttpMessageConverter、Jackson、消息转化器、对象转化器...都是啥?
前段时间在学习SSM框架(spring boot、spring MVC、mybatis)后端项目的时候,发现他们的项目里:响应类Result类要实现Serializable接口、转化响应给前端的时间数据的格式要用到什么“消息转换器”MappingJackson2HttpMwssageConvert…...
GNU/Linux - memtool使用
在Yocto中为NXP的i.MX系列芯片构建Linux系统时,可以加入一些实用工具,比如直接操作内存的memtool。 这些工具在imx-test包中,比如imx-test_git.bb里。 比如在imx-image-core.bb中,IMAGE_INSTALL "imx-test" ࿰…...
Qt5.12.8源码交叉编译带openssl版本
一.背景 近期项目由于对接方的Qt版本是Qt5.12.8,后台服务是https的,之前用的Qt5.15.10要切换成Qt5.12.8,并且为了能支持https,必须要重新编译Qt。 二.环境 环境准备: Ubuntu版本 :18.04; openss…...
串行并行数据转换
前言 串行数据传输通常在数据传输距离较远时使用,而并行数据传输适用于短距离、高速数据交换。通过转换,可以根据实际需求选择合适的传输方式,以优化数据传输效率和速度。串行数据传输在长距离传输中可以减少信号的干扰和失真,因为…...
推荐一个优秀的 .NET MAUI 组件库
目录 前言 组件介绍 组件展示 布局 按钮 复选框 进度条 导航栏 组件地址 最后 前言 .NET MAUI 的发布,项目中可以使用这个新的跨平台 UI 框架来轻松搭建的移动和桌面应用。 为了帮助大家更快地构建美观且功能丰富的应用,本文将推荐一款优秀…...
用Manim创建条形图【BarChart】
BarChart是Manim库中用于创建条形图的函数。它允许用户通过一组值创建一个条形图,其参数可以调整条形的外观和布局。 BarChart(values, bar_namesNone, y_rangeNone, x_lengthNone, y_lengthNone, bar_colors[#003f5c, #58508d, #bc5090, #ff6361, #ffa600],bar_w…...
iMES工厂管家:强大的工厂管理系统
iMES工厂管家:强大的工厂管理系统 在现代工厂管理中,iMES工厂管家作为一款功能强大的MES系统,为用户提供了全面的管理解决方案。本文将介绍iMES工厂管家的基本信息、特点、以及如何快速部署和使用。 软件简介 iMES工厂管家是一款基于.NetCor…...
iOS ------ 事件响应链
响应者链 响应者链是由一系列链接在一起的响应者(UIResponser之类:UIApplication,UIViewController,UIView)注组成的。一般情况下,一条响应链开始于第一响应者,结束于application对象。如果一个…...
Go 语言 switch 语句的特点
在 Go 语言中,switch 语句设计得更加简洁和直观,因此不需要显式使用 break 语句来终止一个分支。这种设计决策源于 Go 语言的一些设计哲学和目标,主要包括: 自动终止: Go 语言的 switch 语句会在每个 case 执行完成后自…...
【递归】什么是递归-C语言为例
递归是指一个函数在其定义中直接或间接调用自身的编程技巧。在C语言中,递归常用于解决可以被分解为更小的子问题的问题。递归函数通常由两个主要部分组成: 基准情况:这是递归停止的条件,通常是最简单的情况。 递归情况࿱…...
vue针对低版本浏览器不兼容es6特性解决方案,
browser.min.js 解决ES6兼容IE browser.min.js,polyfill.min.js vue针对安卓低版本、ios9 不兼容 es6特性解决方案 解决IE9无法使用promise的js脚本,引入后,还需跟browser.js配合使用 Babel 默认只转换新的 JavaScript 句法,po…...
嵌入式内存管理高频面试题及参考答案(4万字长文)
目录 嵌入式系统中内存管理的重要性 嵌入式系统中的内存主要分为哪几类? 静态内存分配和动态内存分配的特点 内存对齐的概念及其作用 嵌入式系统中为什么需要关注内存碎片问题 内存分区的概念及其在嵌入式系统中的应用 内存映射文件的概念及其在嵌入式系统中的作用 虚…...
TinyWebserver的复现与改进(2):项目的整体框架
上文我们成功运行了代码,本文我们将对项目的整体流程作一下讲解 如果你之前没做过相关的内容,对服务器的⾼并发模型也⼀⽆所知,不建议继续做下去,需要的前置知识有: Linux的基本命令(⭐)多进程…...
R 语言学习教程,从入门到精通,R 字符串(10)
1、R 字符串 R 语言字符串可以使用一对单引号 ’ ’ 或一对双引号 " " 来表示。 单引号字符串中可以包含双引号。 单引号字符串中不可以包含单引号。 双引号字符串中可以包含单引号。 双引号字符串中不可以包含双引号。 以下示例演示来字符串的使用: a …...
QT 简易音乐播放器
目录 放置控件 获取mp3文件 播放音乐 准备工作 加载模块 加载头文件 new一个output对象,Mediaplayer对象 把outpout对象交给mediaplayer对象 给播放器设置音乐 播放 优化 上一曲下一曲功能 双击歌曲播放 获取音乐时长和音乐播放时间 让音乐进度条跟随音乐走 调…...
代码随想录八股训练营day32
代码随想录八股训练营day32 1、synchronized和lock的区别是什么 (1)synchronized和lock的区别是什么 synchronized和Lock都是Java中用于实现线程同步的手段,synchronized是Java的关键字,基于JVM的内置锁实现,可以用于…...
11.面试题——消息队列RabbitMQ
1.RabbitMQ是什么?特点是什么? RabbitMQ是一种开源的消息队列中间件,用于在应用程序之间进行可靠的消息传递。它实现了AMQP(Advanced Message Queuing Protocol)协议,提供了强大的消息处理能力。RabbitMQ的…...
MySQL运维-日志
错误日志 二进制日志 介绍 日志格式 日志查看 日志删除 查询日志 慢查询日志...
Unity Il2CppDumper原理与实战:解析元数据与二进制对齐
1. 这不是“破解工具”,而是Unity开发者该懂的二进制真相课 你刚在Unity Asset Store下载了一个功能惊艳的插件,却在打包iOS后发现部分逻辑失效;或者接手一个没有源码的旧项目,只有一堆 .dll 和 .so 文件,连主入口…...
本地柴油发电机组排行2023年最新榜单
柴油发电机是通过燃烧柴油驱动发动机,进而发电的设备,广泛应用于电力中断或无电网地区。1. 柴油发电机的核心工作原理是什么?柴油发电机是一种将化学能转化为电能的设备,其核心是柴油发动机与交流发电机的组合。当柴油在发动机内燃…...
对称与负电源测试:动态直流电子负载的设计、原理与应用
1. 项目概述:对称与负电源的静态与动态直流负载在电子实验室里,测试一个电源的性能,尤其是它的动态响应能力,是件既基础又关键的事。我们常说的“直流电子负载”就是这个领域的核心工具。我之前设计并分享过一个用于正电源测试的静…...
车载诊断系统(OBD)的原理、演进与未来
本文约8,167字,建议收藏阅读 作者 | 北湾南巷 出品 | 汽车电子与软件 引 言 在现代汽车中,越来越多的故障不再表现为明显的机械损坏,而是以“亮灯”“报码”“性能异常”等电子信号的形式出现。发动机为什么亮起故障灯?排放是否达…...
3分钟开启PC游戏分屏派对:NucleusCoop让单机游戏秒变多人同屏神器
3分钟开启PC游戏分屏派对:NucleusCoop让单机游戏秒变多人同屏神器 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为热门PC游戏不支…...
Hermes Agent 框架如何对接 Taotoken 作为自定义模型供应商并配置环境变量
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Hermes Agent 框架如何对接 Taotoken 作为自定义模型供应商并配置环境变量 Hermes Agent 是一个流行的 AI 代理开发框架࿰…...
量子机器学习与傅里叶分析:革新期权定价的混合计算范式
1. 项目概述:当量子机器学习遇见金融定价在金融工程的核心地带,期权定价一直是个计算密集型的硬骨头。传统的蒙特卡洛模拟虽然通用,但为了达到足够的精度,动辄需要百万甚至千万次的路径模拟,计算成本高昂。近年来&…...
告别复杂模型:用Python+OpenCV+dlib实现简易驾驶员疲劳监测(附完整代码)
轻量级驾驶员疲劳监测系统:PythonOpenCVdlib实战指南 在长途驾驶或夜间行车时,疲劳是导致交通事故的重要因素之一。传统基于嵌入式设备的疲劳监测系统往往需要专用硬件,增加了开发成本和部署难度。本文将介绍如何利用Python生态中的OpenCV和d…...
基于BLE模块的低功耗无线遥控器设计与实现
1. 项目概述:基于BLE模块的无线遥控器设计与实现几年前,我在捣鼓智能家居时,一直想找一个低功耗、响应快、又能自己完全掌控的无线遥控方案。市面上的成品要么协议封闭,要么功耗感人,要么延迟高得让人着急。后来&#…...
【仅限首批200家认证用户】DeepSeek v3.2.1重复检测私有化部署补丁包(含GPU内存泄漏热修复+增量扫描加速模块)
更多请点击: https://intelliparadigm.com 第一章:DeepSeek代码重复检测 DeepSeek-R1 模型在训练过程中引入了严格的代码去重机制,其核心目标是消除训练语料中语义等价或高度相似的代码片段,从而提升模型对真实编程模式的学习能力…...
