|
@@ -24,10 +24,12 @@
|
|
|
|
|
|
|
|
- ✅ **AI 辅助开发与审查**,结合 **[coderabbitai](https://www.coderabbit.ai)** 与 **[Copilot](https://github.com/features/copilot)** ,在编码与代码审查阶段持续优化代码质量,构建多层安全防线
|
|
- ✅ **AI 辅助开发与审查**,结合 **[coderabbitai](https://www.coderabbit.ai)** 与 **[Copilot](https://github.com/features/copilot)** ,在编码与代码审查阶段持续优化代码质量,构建多层安全防线
|
|
|
|
|
|
|
|
-- ✅ **8 大类专项测试用例**,覆盖广泛场景,全链路内存泄漏检测,强化稳定性与可靠性
|
|
|
|
|
|
|
+- ✅ **11 大类专项测试用例**,覆盖广泛场景,全链路内存泄漏检测,强化稳定性与可靠性
|
|
|
|
|
|
|
|
- ✅ **支持多客户端实例**,满足复杂业务场景下的多连接需求
|
|
- ✅ **支持多客户端实例**,满足复杂业务场景下的多连接需求
|
|
|
|
|
|
|
|
|
|
+- ✅ **支持弱网/丢包严重环境**,保障连接稳定与消息可靠传输
|
|
|
|
|
+
|
|
|
- ✅ **全等级 QoS 支持(QoS0/1/2)**,并提供**用户可控的消息丢弃策略**,防止 QoS1/QoS2 重传导致内存无限堆积
|
|
- ✅ **全等级 QoS 支持(QoS0/1/2)**,并提供**用户可控的消息丢弃策略**,防止 QoS1/QoS2 重传导致内存无限堆积
|
|
|
|
|
|
|
|
- ✅ **完整的主题匹配与通配符支持**,主题层级分隔符 `/`、通配符 `#`/`+`,并正确处理以 `$` 开头的系统主题
|
|
- ✅ **完整的主题匹配与通配符支持**,主题层级分隔符 `/`、通配符 `#`/`+`,并正确处理以 `$` 开头的系统主题
|
|
@@ -39,9 +41,8 @@
|
|
|
- ✅ **丰富的参数与事件回调接口**,丰富的参数配置与事件回调接口,满足绝大多数实际项目需求(**欢迎提出新需求**)
|
|
- ✅ **丰富的参数与事件回调接口**,丰富的参数配置与事件回调接口,满足绝大多数实际项目需求(**欢迎提出新需求**)
|
|
|
|
|
|
|
|
- ✅**高性能与高并发能力**,在 Linux 环境下稳定支撑 20 个并发发送线程,每线程连续发送 1000 条 QoS1/QoS2 消息,零丢包、零异常
|
|
- ✅**高性能与高并发能力**,在 Linux 环境下稳定支撑 20 个并发发送线程,每线程连续发送 1000 条 QoS1/QoS2 消息,零丢包、零异常
|
|
|
- > ⚠️ 实际性能受单片机内存大小及网络硬件能力影响
|
|
|
|
|
-
|
|
|
|
|
-- ✅ **复杂线程环境下稳定运行**,已在多个商业项目中长期验证
|
|
|
|
|
|
|
+
|
|
|
|
|
+- ✅ **复杂线程环境下稳定运行**,已在公司多个商业项目中长期验证
|
|
|
|
|
|
|
|
- ✅ **跨平台设计**,仅需实现少量平台接口即可快速移植
|
|
- ✅ **跨平台设计**,仅需实现少量平台接口即可快速移植
|
|
|
|
|
|
|
@@ -65,7 +66,56 @@ RyanMqtt 设计时参考了[mqttclient](https://github.com/jiejieTop/mqttclient)
|
|
|
| **系统服务管理模块** | 提供会话管理、事件调度、通配符匹配、消息链表管理等基础服务 |
|
|
| **系统服务管理模块** | 提供会话管理、事件调度、通配符匹配、消息链表管理等基础服务 |
|
|
|
| **用户应用模块** | 向用户提供完整的 API 接口,包括客户端生命周期管理、连接控制、发布/订阅、事件注册等 |
|
|
| **用户应用模块** | 向用户提供完整的 API 接口,包括客户端生命周期管理、连接控制、发布/订阅、事件注册等 |
|
|
|
|
|
|
|
|
-### 3、平台接口
|
|
|
|
|
|
|
+### 3、测试体系
|
|
|
|
|
+
|
|
|
|
|
+**11 大类专项测试用例**,覆盖从基础功能到极限压力场景的全流程验证:
|
|
|
|
|
+
|
|
|
|
|
+| 测试类别 | 测试目标 |
|
|
|
|
|
+| --------------------------------------------------------- | ------------------------------------------------------------ |
|
|
|
|
|
+| 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参数校验 | 提升接口健壮性与可用性 |
|
|
|
|
|
+| 9. 随机网络故障内存回收检测 | 验证异常网络情况下的内存释放,提升接口健壮性与可用性 |
|
|
|
|
|
+| 10. 随机网络故障弱网丢包测试 | 在弱网及高丢包环境下,完成 QOS 全等级消息完整性与内存回收验证 |
|
|
|
|
|
+| 11. 随机内存故障,内存回收测试 | 验证内存异常情况下的资源释放,提升接口健壮性与可用性 |
|
|
|
|
|
+
|
|
|
|
|
+#### 📊 测试覆盖范围
|
|
|
|
|
+
|
|
|
|
|
+- **基础连接**:100 次循环连接/断开,混合 QoS 消息与订阅
|
|
|
|
|
+- **消息流控**:连续发送 QoS0/1/2 等级 1000 条消息,混合 QoS 压力测试
|
|
|
|
|
+- **订阅管理**:批量、大量、重复、混合 QoS 订阅与取消
|
|
|
|
|
+- **并发压测:**
|
|
|
|
|
+ - 单客户端 20 线程 × 各 1000 条 QoS1/2 消息
|
|
|
|
|
+ - 多客户端 20 并发实例进行双向发布/订阅
|
|
|
|
|
+- **可靠性**:长连接、弱网、随机网络故障、随机内存故障、Keep-Alive、重连机制验证
|
|
|
|
|
+- **资源安全**:全链路内存泄漏、句柄泄漏检测
|
|
|
|
|
+
|
|
|
|
|
+### 4、代码质量与规范
|
|
|
|
|
+
|
|
|
|
|
+#### ✅ 工具链全面集成
|
|
|
|
|
+
|
|
|
|
|
+| 工具 | 用途 |
|
|
|
|
|
+| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
|
|
|
|
+| **[Sanitizer](https://clang.llvm.org/docs/index.html#sanitizers)** | 运行时捕获内存与线程安全问题 |
|
|
|
|
|
+| **[clang-tidy](https://clang.llvm.org/extra/clang-tidy/#clang-tidy)** | 静态分析潜在缺陷(空指针、资源泄漏等) |
|
|
|
|
|
+| **[Cppcheck](https://cppcheck.sourceforge.io/)** | 深度扫描内存与资源问题 |
|
|
|
|
|
+| **[ClangFormat](https://clang.llvm.org/docs/ClangFormat.html)** | 统一代码风格 |
|
|
|
|
|
+| **编译器警告** | `-Wall -Wextra`(默认)、`-Weffc++`/`-Weverything`(Clang 可选,CI 强化时开启) |
|
|
|
|
|
+
|
|
|
|
|
+#### ✅ 检查重点覆盖
|
|
|
|
|
+
|
|
|
|
|
+- 内存安全:杜绝泄漏、越界、悬空指针
|
|
|
|
|
+- 性能优化:减少冗余拷贝与低效算法
|
|
|
|
|
+- 可读性:命名规范、注释完整、逻辑清晰
|
|
|
|
|
+
|
|
|
|
|
+> ✅ **成果**:实现接近语法级"**零缺陷**",长期维护成本大幅降低
|
|
|
|
|
+
|
|
|
|
|
+### 5、平台接口
|
|
|
|
|
|
|
|
_RyanMqtt 依赖于用户实现以下三类平台接口,以确保在不同系统中正常运行。_
|
|
_RyanMqtt 依赖于用户实现以下三类平台接口,以确保在不同系统中正常运行。_
|
|
|
|
|
|
|
@@ -117,7 +167,7 @@ _RyanMqtt 依靠函数生成毫秒时间戳,用于计算持续时间和超时
|
|
|
| ---------------- | ---------------------------- |
|
|
| ---------------- | ---------------------------- |
|
|
|
| platformUptimeMs | 返回系统启动以来的毫秒时间戳 |
|
|
| platformUptimeMs | 返回系统启动以来的毫秒时间戳 |
|
|
|
|
|
|
|
|
-### 4、示例
|
|
|
|
|
|
|
+### 6、示例
|
|
|
|
|
|
|
|
#### RT-Thread 平台
|
|
#### RT-Thread 平台
|
|
|
|
|
|
|
@@ -147,11 +197,11 @@ _RyanMqtt 依靠函数生成毫秒时间戳,用于计算持续时间和超时
|
|
|
|
|
|
|
|
- 接口示例请参考 platform/linux 文件夹,请根据平台差异进行修改
|
|
- 接口示例请参考 platform/linux 文件夹,请根据平台差异进行修改
|
|
|
|
|
|
|
|
-### 5、依赖
|
|
|
|
|
|
|
+### 7、依赖
|
|
|
|
|
|
|
|
本项目 **无外部第三方库依赖**,仅依赖用户实现的平台接口。
|
|
本项目 **无外部第三方库依赖**,仅依赖用户实现的平台接口。
|
|
|
|
|
|
|
|
-### 6、免责声明
|
|
|
|
|
|
|
+### 8、免责声明
|
|
|
|
|
|
|
|
> ⚠️ **重要提示**
|
|
> ⚠️ **重要提示**
|
|
|
|
|
|