0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread软件包,RyanMqtt 2.0 发布,全面重构:更轻、更快、更安全、更可靠 | 技术集结

RT-Thread官方账号 2025-12-09 18:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

RyanMqtt 2.0

RT-Thread 社区精品软件包 RyanMqtt 发布 2.0 新版本!
更轻、更快、更安全、更可靠,为你的物联网连接注入新动力。

软件包地址:https://packages.rt-thread.org/detail.html?package=RyanMqtt

原文链接,欢迎讨论:https://club.rt-thread.org/ask/article/3d5f29ae6ac922e0.html

核心亮点

维度

变更类型

核心价值

协议栈

Paho MQTT Embedded → coreMQTT

社区维护活跃、测试覆盖完善,为未来 MQTT 5.0 支持奠定基础

运行时安全分析验证

使用 Sanitizer 进行运行时安全分析验证

调试阶段捕获内存越界、Use-after-free、数据竞争、未定义行为、内存泄漏等问题,提升代码健壮性与安全性

高质量代码保障

引入 clang-tidy 和 Cppcheck 进行静态分析

高质量代码保障,接近语法级”零缺陷“,显著提升可维护性

AI 辅助开发与审查

使用 coderabbitai 和 Copilot 辅助编码与代码审查

AI 辅助开发与审查,持续提升代码质量,构筑安全防线

内存管理优化

固定缓冲区 →动态按需分配

采用按需动态分配,降低运行内存占用

线程安全强化

更完善的线程安全

支撑复杂线程应用场景,杜绝竞态风险

测试体系升级

新增专项测试

覆盖广泛场景,全链路内存泄漏检测,强化稳定性与可靠性

公共 API 变化

新增接口

// 批量订阅/取消订阅externRyanMqttError_eRyanMqttSubscribeMany(RyanMqttClient_t *client,int32_tcount, RyanMqttSubscribeData_t subscribeManyData[]);externRyanMqttError_eRyanMqttUnSubscribeMany(RyanMqttClient_t *client,int32_tcount, RyanMqttUnSubscribeData_t unSubscribeManyData[]);// 带用户数据的发布externRyanMqttError_eRyanMqttPublishAndUserData(RyanMqttClient_t *client,char*topic,uint16_ttopicLen, char*payload,uint32_tpayloadLen, RyanMqttQos_e qos, RyanMqttBool_e retain,void*userData);// 线程安全的订阅查询,仅可通过 RyanMqttSafeFreeSubscribeResources 进行安全释放。externRyanMqttError_eRyanMqttGetSubscribeSafe(RyanMqttClient_t *client, RyanMqttMsgHandler_t **msgHandles, int32_t*subscribeNum);externRyanMqttError_eRyanMqttSafeFreeSubscribeResources(RyanMqttMsgHandler_t *msgHandles,int32_tsubscribeNum);// 订阅数量查询externRyanMqttError_eRyanMqttGetSubscribeTotalCount(RyanMqttClient_t *client,int32_t*subscribeTotalCount);// 获取 MQTT Config 信息,仅可通过 RyanMqttFreeConfigFromGet 进行安全释放。externRyanMqttError_eRyanMqttGetConfig(RyanMqttClient_t *client, RyanMqttClientConfig_t **pclientConfig);externRyanMqttError_eRyanMqttFreeConfigFromGet(RyanMqttClientConfig_t *clientConfig);

新增功能价值

接口

用途

优势

SubscribeMany

批量订阅/取消多个主题

减少网络往返,提升吞吐效率

PublishAndUserData

发布消息附带上下文

回调中可直接读取用户数据,简化状态管理

GetSubscribeSafe

安全查询订阅状态

内部同步,多线程安全

GetSubscribeTotalCount

获取订阅总数量

便于监控与资源调度

平台抽象层优化

1. 统一时间接口

uint32_tplatformUptimeMs(void);

跨平台毫秒级运行时间

内部处理 32 位回绕,长时间运行稳定

2. 网络收发模型简化

收发接口改为单次调用语义,减少冗余循环与分支

返回实际传输字节数,更贴近底层行为

异常恢复路径更明确

测试体系全面升级

新增8 大类专项测试用例,覆盖从基础功能到极限压力场景的全流程验证:

测试类别

测试目标

1. 客户端销毁压力测试

验证资源释放的幂等性与完整性

2. 心跳与超时处理

Keep-Alive、PINGREQ/RESP 机制验证

3. 消息链路完整性(QoS 0/1/2

QoS 0/1/2 消息端到端可靠性验证

4. 自动/手动重连机制

状态机正确性与连接恢复能力

5. 批量/重复订阅一致性

订阅表一致性、内存安全、去重逻辑

6. 多客户端高并发

20+ 客户端并发运行稳定性

7. 单客户端多线程共享(20 线程 × 各 1000 条 QoS1/2 消息)

锁机制、数据一致性、竞态防护

8. 公共API参数校验

提升接口健壮性与可用性

测试覆盖范围

基础连接:100 次循环连接/断开,混合 QoS 消息与订阅

消息流控:连续发送 QoS0/1/2 等级 1000 条消息,混合 QoS 压力测试

订阅管理:批量、大量、重复、混合 QoS 订阅与取消

并发压测:

单客户端 20 线程 × 各 1000 条 QoS1/2 消息

多客户端 20 并发实例进行双向发布/订阅

可靠性:长连接、弱网、Keep-Alive、重连机制验证

资源安全:全链路内存泄漏、句柄泄漏检测

代码质量与规范

工具链全面集成

工具

用途

Sanitizer

运行时捕获内存与线程安全问题

clang-tidy

静态分析潜在缺陷(空指针、资源泄漏等)

Cppcheck

深度扫描内存与资源问题

ClangFormat

统一代码风格

编译器警告

-Wall -Wextra(默认)、-Weffc++/-Weverything(Clang 可选,CI 强化时开启)

检查重点覆盖

内存安全:杜绝泄漏、越界、悬空指针

性能优化:减少冗余拷贝与低效算法

可读性:命名规范、注释完整、逻辑清晰

成果:实现接近语法级”零缺陷“,长期维护成本大幅降低

安全性与可靠性全面提升

公共 API 全面审查

核心数据结构访问均受同步机制保护

动态内存策略更健壮,异常路径也能安全释放

输入验证与边界检查更严格,防御性编程增强

网络异常处理更完善,弱网环境下连接恢复更快

错误恢复路径更稳健,超时策略更精准

总结

本次 RyanMqtt 2.0 是一次具有里程碑意义的升级:

技术栈现代化:迁移至 coreMQTT,拥抱更活跃的生态与未来扩展能力

架构更清晰:模块高度解耦,抽象设计更合理

质量更可信:专项测试 + 静态分析 + AI 审查构筑强大防线

性能再优化:更低资源占用、更高吞吐效率

维护更轻松:统一代码规范、平台抽象降低长期开发成本

从 1.x 迁移至 2.x

RyanMqtt 2.0 在设计上尽量减少破坏性变更。升级过程极为简单:

V1.x升级到V2.x时,需在RyanMqttClientConfig_t结构体中移除以下四个已废弃字段:

char*recvBuffer; // MQTT 接收缓冲区(已废弃)char*sendBuffer; // MQTT 发送缓冲区(已废弃)uint32_trecvBufferSize;// 接收缓冲区大小(已废弃)uint32_tsendBufferSize;// 发送缓冲区大小(已废弃)

受影响的主要接口(其余接口原则上兼容,如有差异以头文件为准):

RyanMqttError_eRyanMqttSetConfig(RyanMqttClient_t *client, RyanMqttClientConfig_t *clientConfig);// packetType 不再使用enum msgTypes, 新类型请参考 RyanMqttPublic.h 文件内MQTT packet types宏定义RyanMqttError_eRyanMqttDiscardAckHandler(RyanMqttClient_t *client,uint8_tpacketType,uint16_tpacketId);

其余 API 与配置保持兼容,无需额外修改即可完成迁移。若编译期出现不兼容,请以 mqttclient/include/*.h 中的最新签名为准。

强烈建议所有用户都升级到2.0!选择latest就是2.0版本,已在公司项目运行好几个月

不准备升级到2.0的用户可以选择1.2.1版本,是V1的最后一个版本

RyanMqtt github仓库

https://github.com/Ryan-CW-Code/RyanMqtt

RT-Thread社区软件包:

https://packages.rt-thread.org/detail.html?package=RyanMqtt

20250916更新

RyanMqtt核心库细节优化、test新增3个测试例程

测试类别

测试目标

随机网络故障弱网丢包测试

在弱网及高丢包环境下,完成 QOS 全等级消息完整性与内存回收验证

随机网络故障内存回收检测

验证异常网络情况下的内存释放,提升接口健壮性与可用性

随机内存故障,内存回收测试

验证内存异常情况下的资源释放,提升接口健壮性与可用性

20251013更新

修复客户端销毁逻辑:在 init 后未执行 start 即销毁时,资源无法释放的问题

支持零长度字符串:clientId、userName、password 现在允许长度为 0

内存优化:降低 Config 内存占用

测试增强:补充对应的单元测试代码

RT-Thread Github 开源仓库,欢迎撒个星(Star)支持,更期待你的代码贡献:https://github.com/RT-Thread/rt-thread

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2943

    文章

    47620

    浏览量

    411641
  • 软件
    +关注

    关注

    69

    文章

    5317

    浏览量

    91205
  • RT-Thread
    +关注

    关注

    32

    文章

    1579

    浏览量

    44504
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    手搓一个RT-Thread工地巡检机器人要几步? | 技术集结

    本项目为RT-Thread嵌入式大赛获奖作品,基于CanMVK230的工地巡检机器人。K230芯片集成了两颗RISC-V处理器核心,双核玄铁C908。RT-Thread全面支持XUANTIE系
    的头像 发表于 12-29 21:46 2860次阅读
    手搓一个<b class='flag-5'>RT-Thread</b>工地巡检机器人要几步? | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    基于RT-Thread的简单物联网温控箱 | 技术集结

    目录项目概述RT-Thread使用情况概述硬件框架软件框架说明演示效果改进方向代码地址1项目概述本项目是一个简易的、较高精度的、易于扩展的桌面级温控系统。实现对箱内温度的精确控制,并通过Wi-Fi
    的头像 发表于 12-26 18:18 6123次阅读
    基于<b class='flag-5'>RT-Thread</b>的简单物联网温控箱 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    敢不敢让你的芯片上榜?RT-Thread最全BSP支持清单重磅更新!| 技术集结

    SoC,真正做到“拿来即用、开箱即跑”。在此我们希望全面的向大家介绍RT-Thread的BSP(板级支持)支持现状,并诚挚邀请每一位嵌入式工程师和芯片合作伙伴,
    的头像 发表于 11-22 09:04 1005次阅读
    敢不敢让你的芯片上榜?<b class='flag-5'>RT-Thread</b>最全BSP支持清单重磅更新!| <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    元服务发布选择待发布软件包

    上传软件包并通过基础合法检查后,就可以从上传的版本中选择需要发布软件包。 登录AppGallery Connect,点击“APP与元服务”。 选择要发布的元服务。 左侧导航选择“应用
    发表于 11-03 17:10

    RT-Thread studio打不开 RT-thread setting界面怎么解决?

    点击编译按钮无报错,成功编译 问题2 双击rt-thread setting,没有任何提示,也没有任何窗口弹出。我无法配置软件包 操作描述3 关闭软件,双击桌面图标第二次打开 问题3 第二次无法
    发表于 10-14 07:06

    为智能汽车打造“安全+效率+生态”内核,RT-Thread睿赛德重磅发布车控白皮书

    背景下RT-Thread睿赛德开发了一款专为汽车安全应用设计的高可靠实时车控系统“程翧车控平台”,白皮书对其在核心技术、优势特点与生态战略等方面深度剖析和阐述。该白
    的头像 发表于 09-19 19:24 1078次阅读
    为智能汽车打造“<b class='flag-5'>安全</b>+效率+生态”内核,<b class='flag-5'>RT-Thread</b>睿赛德重磅<b class='flag-5'>发布</b>车控白皮书

    请问RT-Thread Studio更新软件包为什么不成功?

    RT-Thread Studio更新软件包出现 MESSAGE cmd_package_update 462 WARNING Error message : local variable
    发表于 09-18 06:36

    Windows上使用ENV工具开发基于先楫MCU的RT-Thread应用

    前言Env是RT-Thread推出的开发辅助工具,针对基于RT-Thread操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的menuconfig提供了简单易用的配置剪裁
    的头像 发表于 08-29 12:22 1166次阅读
    Windows上使用ENV工具开发基于先楫MCU的<b class='flag-5'>RT-Thread</b>应用

    在Ubuntu上开发基于先楫MCU的RT-Thread应用指南

    1、前言RT-ThreadEnv是RT-Thread推出的开发辅助工具,针对基于RT-Thread操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的menu
    的头像 发表于 08-29 12:22 1415次阅读
    在Ubuntu上开发基于先楫MCU的<b class='flag-5'>RT-Thread</b>应用指南

    【好书推荐】RT-Thread第20本相关书籍!《嵌入式实时操作系统RT-Thread原理与应用》| 技术集结

    01内容简介ContentSummary本书为读者提供了一个全面、系统的RT-Thread学习指南,旨在帮助初学者及有经验的开发者掌握RT-Thread实时操作系统和STM32嵌入式微控制器的核心
    的头像 发表于 08-24 10:05 825次阅读
    【好书推荐】<b class='flag-5'>RT-Thread</b>第20本相关书籍!《嵌入式实时操作系统<b class='flag-5'>RT-Thread</b>原理与应用》| <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    用SPI玩转WiFi,RT-Thread ESP-Hosted驱动深度适配指南 | 技术集结

    还在为MCU的WiFi连接方案发愁?RT-Thread社区开源ESP-Hosted驱动,通过标准SPI接口即可实现,并且该仓库已整理成RT-Thread软件包RT
    的头像 发表于 07-09 19:03 1457次阅读
    用SPI玩转WiFi,<b class='flag-5'>RT-Thread</b> ESP-Hosted驱动深度适配指南 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    RT-Thread BSP全面支持玄铁全系列RISC-V 处理器 | 技术集结

    RT-Thread标准版已全面适配玄铁E、R、C系列内核,并在C906内核上支持RT-Smart微内核操作系统。本文将以E906运行RT-Thread和C906运行
    的头像 发表于 07-03 18:03 2906次阅读
    <b class='flag-5'>RT-Thread</b> BSP<b class='flag-5'>全面</b>支持玄铁全系列RISC-V 处理器 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    让开发板畅游网络:RT-Thread CherryUSB 驱动 RNDIS 模块详解 | 技术集结

    本文通过在RT-Thread操作系统上,使用CherryUSB软件包作为USBHost协议栈,驱动AIR780E4GCat.1模块的RNDIS功能,并成功接入lwIP网络协议栈,最终在开发板上实现了
    的头像 发表于 07-02 17:04 3235次阅读
    让开发板畅游网络:<b class='flag-5'>RT-Thread</b> CherryUSB 驱动 RNDIS 模块详解 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    2025 RT-Thread全球技术大会议程正式发布

    RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技术大会)是聚焦基础软件技术创新
    的头像 发表于 05-27 19:28 1155次阅读
    2025 <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会议程正式<b class='flag-5'>发布</b>!

    RT-Thread Studio更新软件包为什么不成功呢?

    RT-Thread Studio更新软件包出现 MESSAGE cmd_package_update 462 WARNING Error message : local variable
    发表于 05-27 06:53