当前位置: 首页 > news >正文

(十三)、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分析工具&#xff1a;webpack-bundle-analyzer 1. 通过<script src"./vue.js"></script>方式引入vue、vuex、vue-router等包&#xff08;CDN&#xff09; // webpack.config.js if(process.env.NODE_ENVproduction) {module.exports {devtool:…...

numpy的array/asarray/asanyarray的格式转化错误问题解决

关于numpy的array()、asarray()、asanyarray() 当前numpy版本&#xff1a;1.26.3 有时一些依赖numpy的旧项目&#xff0c;在运行时&#xff0c;会出现如下错误 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&#xff08;对组&#xff09; pair中第一个元素为key&#xff08;键&#xff09;&#xff0c;起到索引作用&#xff0c;第二个元素为value&#xff08;实…...

你好,复变函数2.0

第一行&#xff1a;0 或 1 第二行&#xff1a;&#xff08;空格&#xff09;函数&#xff08;后缀&#xff09; #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. 汉语拼音声母表 声母是韵母前的辅音&#xff0c;与韵母一起构成一个完整的音节。 辅音是发声时&#xff0c;气流在口腔中受到各种阻碍所产生的声音&#xff0c;发音的过程即是气流受阻和克…...

C++20中的Feature Test Mocros

C20定义了一组预处理器宏&#xff0c;用于测试各种语言和库的feature。 Feature Test Mocros(特性测试宏)是C20中引入的一种强大机制&#xff0c;用于应对兼容性问题。Feature Test Mocros作为预处理器指令(preprocessor directives)出现&#xff0c;它使你能够在编译过程中仔细…...

运维iptables与firewalld详解

iptables与firewalld 一、iptables 1.1 iptables简介 iptables 是一个在 Linux 系统上用来配置 IPv4 数据包过滤规则的工具。它允许系统管理员控制数据包的流向&#xff0c;实现网络安全、网络地址转换&#xff08;NAT&#xff09;和端口转发等功能。 具体来说&#xff0c;…...

适用于 Android 的 几种短信恢复应用程序

Android 设备上的短信丢失可能由于多种原因而丢失&#xff0c;例如意外删除、恢复出厂设置、系统崩溃或病毒攻击。是否有应用程序可以恢复 Android 上已删除的短信&#xff1f;幸运的是&#xff0c;有几款短信恢复应用程序可以扫描您的 Android 手机并从内存或 SIM 卡中检索已删…...

Lodash-js工具库

1. Lodash 简介 Lodash 是一个现代 实用工具库&#xff0c;提供了许多有用的函数&#xff0c;帮助开发者处理常见的编程任务&#xff0c;如数组操作、对象处理、字符串处理等。Lodash 使得代码更简洁、更高效&#xff0c;极大地提高了开发效率。Lodash 的设计灵感来自于 Under…...

Makefile实战论(一)

为什么写这个呢&#xff0c;其实我有系统学过Makefile和CMake。但是因为用的不是很多或者说没有深入的使用场景&#xff0c;导致我不是很熟练&#xff0c;或者说没法优雅地使用。刚好最近对Linux的嵌入式编程比较感兴趣&#xff0c;借着demo来分析一下资深工程师写的Makefile&a…...

Hi3861 OpenHarmony嵌入式应用入门--PWM 三色灯

这篇文章是讲解的pwm控制三色灯的部分&#xff0c;这部分也是后续全彩智能灯的基础。 硬件原理如下 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设计的程序的下载工具。这款工具与串口下载相比较&#xff0c;不仅提供了稳定的数据传输能力&#xff0c;而且提高…...

如何选择Mac Mouse Fix安装方式:终极指南让您的Mac鼠标体验完美升级

如何选择Mac Mouse Fix安装方式&#xff1a;终极指南让您的Mac鼠标体验完美升级 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix Mac Mouse Fix是…...

2026届学术党必备的降重复率神器实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能技术飞速发展着&#xff0c;学术研究和论文创作领域迎来了深刻变革&#xff0c;维普…...

OpenHarmony模块配置实战:从GN模板到部件依赖的完整指南

1. 从零开始理解OpenHarmony的模块配置&#xff1a;一个资深开发者的实战拆解如果你刚开始接触OpenHarmony的源码开发&#xff0c;面对那一堆BUILD.gn文件和bundle.json配置&#xff0c;是不是感觉有点无从下手&#xff1f;模块、部件、子系统&#xff0c;这些概念听起来就让人…...

Unity GLTF模型导入终极教程:5分钟掌握GLTFUtility完整指南

Unity GLTF模型导入终极教程&#xff1a;5分钟掌握GLTFUtility完整指南 【免费下载链接】GLTFUtility Simple GLTF importer for Unity 项目地址: https://gitcode.com/gh_mirrors/gl/GLTFUtility GLTFUtility是Unity开发者必备的GLTF模型导入工具&#xff0c;能够让你在…...

Android 显示框架:SurfaceFlinger与合成策略探析

1. SurfaceFlinger的核心角色解析 第一次拆解Android显示系统时&#xff0c;我被SurfaceFlinger这个名称逗笑了——"Surface抛洒者"&#xff1f;后来发现这个命名意外地准确。想象你正在布置多屏艺术展&#xff0c;SurfaceFlinger就是那个决定每幅画作展示位置、叠加…...

Codex 杀进 Chrome!接管了我的浏览器后,我在摸鱼

家人们&#xff0c;Codex 这次真的往普通电脑工作流里钻了。 OpenAI 已经宣布&#xff0c;Codex 现在可以直接在 macOS 和 Windows 的 Chrome 中运行。 它可以和 Chrome 里的应用、网站配合得更好&#xff0c;还能在后台标签页之间并行运行&#xff0c;不会一直占用你的键盘鼠标…...

基于Telegram的AI智能体框架:从原理到实践部署指南

1. 项目概述&#xff1a;一个基于Telegram的AI智能体框架最近在GitHub上看到一个挺有意思的项目&#xff0c;叫openclaw-telegram-ai-agent。光看名字&#xff0c;你大概能猜到它是个什么东西&#xff1a;一个运行在Telegram平台上的AI智能体&#xff08;Agent&#xff09;。但…...

心智网络与图神经网络:从Awesome清单到脑科学AI实战

1. 项目概述&#xff1a;当“心智网络”遇见“Awesome”清单如果你对认知科学、人工智能的交叉领域感兴趣&#xff0c;或者正在寻找一个能帮你快速切入“心智网络”研究的导航图&#xff0c;那么你很可能已经听说过或正在寻找mind-network/Awesome-Mind-Network这个项目。简单来…...

终极破解工具:Cursor Pro永久免费使用完整方案,轻松绕过试用限制

终极破解工具&#xff1a;Cursor Pro永久免费使用完整方案&#xff0c;轻松绕过试用限制 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Y…...

让经典游戏在现代Windows系统上流畅运行:DDrawCompat兼容性解决方案

让经典游戏在现代Windows系统上流畅运行&#xff1a;DDrawCompat兼容性解决方案 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirr…...