(十三)、MQTT3.1.1-MQTT服务端数据结构设计
为进一步实现一个简易的MQTT服务端,做如下服务端数据结构设计。
1、服务端协议相关的函数
| 连接 | rx_connect() | 接收连接请求 | Socket中监听,通过第一个字节switch,根据数据创建client对象 |
| tx_connectack() | 回复连接响应 | 处理完成rx_connect后,自动处理。 | |
| 发布 Qos=0 | rx_publish() Qos=0 | 接收发布数据 Qos=0 | Socket中监听,通过第一个字节switch,根据Topic查找client,分发message。 |
| 发布 Qos=1 | rx_publish() Qos=1 | 接收发布数据 Qos=1 | Socket中监听,通过第一个字节switch,根据Topic查找client,分发message。 |
| tx_puback() | 回复发布响应 | 处理完成rx_publish()后,自动处理。 | |
| 发布 Qos=2 | rx_publish() Qos=2 | 接收发布数据 Qos=2 | Socket中监听,通过第一个字节switch,根据Topic查找client,分发message,并且标记状态。 |
| tx_pubrec() | 回复发布响应1 | 处理完成rx_publish()后,自动处理。 | |
| rx_pubrel() | 接收pubrel数据 | Socket中监听,通过第一个字节switch,根据Topic查找client,标记message。 | |
| tx_pubcomp() | 回复发布响应2 | 处理完成rx_pubrel()后,自动处理。 | |
| 订阅 | rx_subscribe() | 接收订阅数据 | Socket中监听,通过第一个字节switch,根据Topic查找Topics列表,将该client添加至topic中。 |
| tx_suback() | 回复订阅响应 | 处理完成rx_suback()后,自动处理。 | |
| 取消订阅 | rx_unsubscribe() | 接收取消订阅数据 | Socket中监听,通过第一个字节switch,根据Topic查找Topics列表,将该client从topic中删除。 |
| tx_unsuback() | 回复取消订阅响应 | 处理完成rx_unsuback()后,自动处理。 | |
| 心跳 | rx_pingreq() | 接收心跳数据 | Socket中监听,通过第一个字节switch,根据TCP/IP查找client,更新pingtime。 |
| tx_pingresp() | 回复心跳响应 | 处理完成rx_pingreq()后,自动处理。 | |
| 断开连接 | rx_disconnect | 接收断开连接数据 | Socket中监听,通过第一个字节switch,根据TCP/IP查找client,将该client从clients中删除。并且将topics中的该client一并删除。 |
2、服务端数据结构
| 列表Clients{ Connect; TCP/IP; Messages; Subscribes; Next_client;} | Client对象列表,clinet属性有连接、TCP/IP、未处理完成的消息、未处理完成的订阅,指向下一个clinet的指针。 | |
| Connect{ Protocolname; protocolLevel; Connectflage; Keepalive; Clientid; Willtopic; Willmessage; Username; Password connectflage;} | 其中: Connectflage{ Bit Usernameflag; Bit Passwordflag; Bit Willretain; Bit Willqos; Bit Willflag; Bit Cleansession; Bit Reserved; } | 每个client对象都有一个连接结构体,记录该client的连接参数。 |
| TCP/IP{ IPaddr; Port; Pingtime;} | Client对象使用的传输物理实现。 | |
| 列表Messages{ Dup; Qos; Retain; M_uuid; Messagedata; Messageflag; Next_message;} | 其中: Messageflag; Qos=0: 0->pub; Qos=1: 0->pub,1->ack Qos=2: 0->pub,1->ack,2->rel,3->comp | Client对象未处理完成的消息。 |
| 列表Subscribes{ Topicfilter; S_uuid; Subscribeflag; Next_subscribe;} | 其中: Subscribeflag; 0->tx,1->ack | Client对象的订阅。 |
| 列表topics{ Topicname; Topic; Nexttopic;} | 其中topic{ Client; Nextclient; } | topics列表中存放了所有的topic,每个topic中存放了所有订阅该topic的client。 |
相关文章:
(十三)、MQTT3.1.1-MQTT服务端数据结构设计
为进一步实现一个简易的MQTT服务端,做如下服务端数据结构设计。 1、服务端协议相关的函数 连接 rx_connect() 接收连接请求 Socket中监听,通过第一个字节switch,根据数据创建client对象 tx_connectack() 回复连接响应 处理完成rx_conn…...
StackOverFlowError常见原因及解决方法总结
StackOverFlowError常见原因及解决方法总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨一下 Java 中一个常见的错误:StackOverFl…...
【安全】Linux Fanotify使用入门
1 Fanotify vs Inotify 在实现某些功能时,可能需要获取某个文件执行的操作,一种可能的方案是用Audit的路径监控,但是Audit存在性能和内核稳定性问题,这个时候就可以其他的文件变更检测机制。 inotify可以监控文件被创建、修改和…...
java的输出流File OutputStream
一、字节输出流FileOutput Stream 1、定义 使用OutputStream类的FileOutput Stream子类向文本文件写入的数据。 2.常用构造方法 3.创建文件输出流对象的常用方式 二、输出流FileOutputStream类的应用示例 1.示例 2、实现步骤 今天的总结就到此结束啦,拜拜&#x…...
32 - 判断三角形(高频 SQL 50 题基础版)
32 - 判断三角形 select *,if(xy>z and xz>y and zy > x,Yes,No) triangle fromTriangle;...
QT 中ListView和ListWidget有什么区别
ListView和ListWidget在Qt框架中都是用于显示列表数据的控件,但它们在使用方法和特性上存在一些明显的差异。以下是关于它们用法不一样的地方的详细分析: 数据管理方式: ListView:使用QAbstractItemModel数据模型来管理和显示列表…...
Python酷库之旅-第三方库openpyxl(07)
目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…...
使用Python进行Web开发:从基础到实战
使用Python进行Web开发:从基础到实战 Python不仅是一门数据科学的利器,也是一门强大的Web开发语言。得益于其简洁的语法和丰富的生态系统,Python在Web开发领域同样大放异彩。本文将介绍Python在Web开发中的基础知识、常用框架以及一个完整的实战项目,帮助读者从基础入门到…...
打包体积分析和优化
webpack分析工具:webpack-bundle-analyzer 1. 通过<script src"./vue.js"></script>方式引入vue、vuex、vue-router等包(CDN) // webpack.config.js if(process.env.NODE_ENVproduction) {module.exports {devtool:…...
numpy的array/asarray/asanyarray的格式转化错误问题解决
关于numpy的array()、asarray()、asanyarray() 当前numpy版本:1.26.3 有时一些依赖numpy的旧项目,在运行时,会出现如下错误 ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1…...
C++:STL容器-map
C:STL容器-map 1. map构造和赋值2. map大小和交换3. map插入和删除4. map查找和统计5. map容器排序 map中所有元素都是pair(对组) pair中第一个元素为key(键),起到索引作用,第二个元素为value(实…...
你好,复变函数2.0
第一行:0 或 1 第二行:(空格)函数(后缀) #pragma warning(disable:4996) #include <easyx.h> #include <stdio.h> #include <math.h> #define PI 3.141592653589793 #define E 2.71828…...
汉语拼音字母表 (声母表和韵母表)
汉语拼音字母表 [声母表和韵母表] 1. 汉语拼音声母表2. 汉语拼音韵母表References 1. 汉语拼音声母表 声母是韵母前的辅音,与韵母一起构成一个完整的音节。 辅音是发声时,气流在口腔中受到各种阻碍所产生的声音,发音的过程即是气流受阻和克…...
C++20中的Feature Test Mocros
C20定义了一组预处理器宏,用于测试各种语言和库的feature。 Feature Test Mocros(特性测试宏)是C20中引入的一种强大机制,用于应对兼容性问题。Feature Test Mocros作为预处理器指令(preprocessor directives)出现,它使你能够在编译过程中仔细…...
运维iptables与firewalld详解
iptables与firewalld 一、iptables 1.1 iptables简介 iptables 是一个在 Linux 系统上用来配置 IPv4 数据包过滤规则的工具。它允许系统管理员控制数据包的流向,实现网络安全、网络地址转换(NAT)和端口转发等功能。 具体来说,…...
适用于 Android 的 几种短信恢复应用程序
Android 设备上的短信丢失可能由于多种原因而丢失,例如意外删除、恢复出厂设置、系统崩溃或病毒攻击。是否有应用程序可以恢复 Android 上已删除的短信?幸运的是,有几款短信恢复应用程序可以扫描您的 Android 手机并从内存或 SIM 卡中检索已删…...
Lodash-js工具库
1. Lodash 简介 Lodash 是一个现代 实用工具库,提供了许多有用的函数,帮助开发者处理常见的编程任务,如数组操作、对象处理、字符串处理等。Lodash 使得代码更简洁、更高效,极大地提高了开发效率。Lodash 的设计灵感来自于 Under…...
Makefile实战论(一)
为什么写这个呢,其实我有系统学过Makefile和CMake。但是因为用的不是很多或者说没有深入的使用场景,导致我不是很熟练,或者说没法优雅地使用。刚好最近对Linux的嵌入式编程比较感兴趣,借着demo来分析一下资深工程师写的Makefile&a…...
Hi3861 OpenHarmony嵌入式应用入门--PWM 三色灯
这篇文章是讲解的pwm控制三色灯的部分,这部分也是后续全彩智能灯的基础。 硬件原理如下 IO管脚定义在hi-12f_v1.1.2-规格书-20211202.pdf文档中 GPIO API API名称 说明 unsigned int IoTGpioInit(unsigned int id); GPIO模块初始化 hi_u32 hi_io_set_func(hi_i…...
CH5xx USB下载工具
文章目录 CH5xx USB下载工具1.前言2.介绍3. USB下载4. 串口免按键下载4.SWD下载 CH5xx USB下载工具 1.前言 CH5xx USB下载工具是一款专为沁恒 CH5xx系列 BLE SOC设计的程序的下载工具。这款工具与串口下载相比较,不仅提供了稳定的数据传输能力,而且提高…...
input-overlay多语言支持:如何为全球观众轻松定制直播输入显示
input-overlay多语言支持:如何为全球观众轻松定制直播输入显示 【免费下载链接】input-overlay Show keyboard, gamepad and mouse input on stream 项目地址: https://gitcode.com/gh_mirrors/in/input-overlay 想要让全球观众都能轻松理解你的游戏操作吗&a…...
hadoop+spark+hive基于大数据的食谱分析与个性化推荐系统 美食推荐系统 美食可视化 大数据毕业设计
前言随着互联网技术的快速发展,人们获取信息的方式发生了巨大变化。特别是在食品领域,用户渴望获得更加个性化的推荐服务。大数据分析技术的出现为满足这一需求提供了可能。并据此提供精准的食谱推荐,从而提升用户体验。系统架构设计本项目 采…...
洛雪音乐音源项目:免费高品质音乐资源获取的终极方案
洛雪音乐音源项目:免费高品质音乐资源获取的终极方案 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 1 价值定位:重新定义音乐资源获取体验 洛雪音乐音源项目作为一款开源…...
一套万能的异步处理方案!(珍藏版)
前言 良好的系统设计必须要做到开闭原则,随着业务的不断迭代更新,核心代码也会被不断改动,出错的概率也会大大增加。但是大部分增加的功能都是在扩展原有的功能,既要保证性能又要保证质量,我们往往都会使用异步线程池…...
手把手教你学Simulink——基于Simulink的模型预测控制(MPC)PFC整流器快速动态响应
目录 手把手教你学Simulink ——基于Simulink的模型预测控制(MPC)PFC整流器快速动态响应 一、问题背景 二、系统建模与控制目标 1. 单相 Boost PFC 拓扑 2. 动态方程(αβ 静止坐标系) 3. 控制目标 三、有限控制集 MPC(FCS-MPC)设计 1. 预测模型(离散化) 2. 代…...
静息态fMRI分析避坑指南:DPARSFA预处理中那些容易踩的‘雷’(附解决方案)
静息态fMRI分析实战避坑手册:DPARSFA预处理中的7个致命陷阱与修复方案 当你熬夜跑完DPARSFA预处理流程,满心期待地点开结果图时——突然发现ReHo图像像被泼了墨水,fALFF数值全部溢出,或是软件弹出一串看不懂的报错代码。这种崩溃…...
深耕纪实创作 AVG Media 以专业能力赋能纪录片产业发展
在全球内容产业快速迭代的当下,纪录片凭借真实的叙事力量、深厚的人文价值与多元的传播场景,成为内容领域中兼具艺术价值与商业价值的重要载体。国内纪录片行业历经多年发展,形成了多元主体参与、创作方向细分、国际合作深化的行业格局&#…...
告别重复操作:用快马生成智能浏览器扩展,极速提升前端调试与数据提取效率
作为一名前端开发者,每天都要和网页元素打交道。调试样式、提取数据这些重复性工作,如果全靠手动操作,不仅效率低下还容易出错。最近我发现用InsCode(快马)平台可以快速生成定制化的浏览器扩展,把那些繁琐操作变成一键自动化&…...
Windows Cleaner智能清理工具:系统优化与空间释放的全面解决方案
Windows Cleaner智能清理工具:系统优化与空间释放的全面解决方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 随着计算机使用时间的增长࿰…...
基于cv_unet_image-colorization的Python爬虫实战:自动化图像数据集着色
基于cv_unet_image-colorization的Python爬虫实战:自动化图像数据集着色 为计算机视觉项目快速构建高质量的彩色图像数据集 在计算机视觉项目中,获取高质量的标注数据集往往是最耗时耗力的环节。特别是当我们需要大量彩色图像数据时,手动收集…...
