|
|
@@ -2,36 +2,17 @@
|
|
|
|
|
|
> **更轻、更快、更安全、更可靠**
|
|
|
|
|
|
-## 📦 升级路线图概览
|
|
|
-
|
|
|
-| 维度 | 变更类型 | 核心价值 |
|
|
|
-| ------------ | :----------------------------------------------------------- | :----------------------------------------------------------- |
|
|
|
-| **协议栈** | **[Paho MQTT Embedded](https://github.com/eclipse-paho/paho.mqtt.embedded-c)** → **[coreMQTT](https://github.com/FreeRTOS/coreMQTT)** | 社区维护活跃、测试覆盖完善,为 [**MQTT 5.0**](https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html) 提供可扩展性基础 |
|
|
|
-| **代码规范** | 引入 **[clang-tidy](https://clang.llvm.org/extra/clang-tidy/#clang-tidy)** 和 **[Cppcheck](https://cppcheck.sourceforge.io/)** 进行静态分析 | **高质量代码保障**,接近语法级"**零缺陷**",显著提升可维护性 |
|
|
|
-| **代码审查** | 使用 **[coderabbitai](https://www.coderabbit.ai)** 和 **[Copilot](https://github.com/features/copilot)** 辅助编码与代码审查 | **AI辅助开发与审查**,持续提升代码质量,构筑安全防线 |
|
|
|
-| **内存管理** | 固定缓冲区 → **动态按需分配** | 按需申请,降低内存占用 |
|
|
|
-| **线程模型** | 更完善的线程安全 | 支撑复杂线程应用场景,杜绝竞态风险 |
|
|
|
-| **测试体系** | 新增 7 大专项测试 | 覆盖广泛场景,全链路内存泄漏检测,强化稳定性与可靠性 |
|
|
|
-
|
|
|
-## 🏗 架构与底层能力变更
|
|
|
-
|
|
|
-### 1. MQTT 协议栈升级
|
|
|
-
|
|
|
-- 从 **[Paho MQTT Embedded](https://github.com/eclipse-paho/paho.mqtt.embedded-c)** 到 **[coreMQTT](https://github.com/FreeRTOS/coreMQTT)**
|
|
|
-- **[coreMQTT](https://github.com/FreeRTOS/coreMQTT)** 社区活跃度高、维护频繁、测试覆盖更全面
|
|
|
-- 更灵活的缓冲区管理策略
|
|
|
-- 为 [**MQTT 5.0**](https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html) 扩展奠定实现基础
|
|
|
-
|
|
|
-### 2. 内存管理更改为动态缓冲区
|
|
|
-
|
|
|
-- 移除固定 `recvBuffer` / `sendBuffer` 配置
|
|
|
-- 采用**按需动态分配**,降低运行内存占用
|
|
|
-
|
|
|
-### 3. 线程安全强化
|
|
|
-
|
|
|
-- 全面审查公共 API 与共享资源访问路径
|
|
|
-- 精细化控制锁粒度,消除竞态并优化性能
|
|
|
-- 在高并发、多客户端、多线程场景下通过专项压力测试
|
|
|
+## 🌟 核心亮点
|
|
|
+
|
|
|
+| 维度 | 变更类型 | 核心价值 |
|
|
|
+| ---------------------- | :----------------------------------------------------------- | :----------------------------------------------------------- |
|
|
|
+| **协议栈** | **[Paho MQTT Embedded](https://github.com/eclipse-paho/paho.mqtt.embedded-c)** → **[coreMQTT](https://github.com/FreeRTOS/coreMQTT)** | 社区维护活跃、测试覆盖完善,为未来 [**MQTT 5.0**](https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html) 支持奠定基础 |
|
|
|
+| **运行时安全分析验证** | 使用 **[Sanitizer](https://clang.llvm.org/docs/index.html#sanitizers)** 进行运行时安全分析 | 调试阶段捕获内存越界、Use-after-free、数据竞争、未定义行为、内存泄漏等问题,大幅提升**代码健壮性与安全性** |
|
|
|
+| **高质量代码保障** | 引入 **[clang-tidy](https://clang.llvm.org/extra/clang-tidy/#clang-tidy)** 和 **[Cppcheck](https://cppcheck.sourceforge.io/)** 进行静态分析 | **高质量代码保障**,接近语法级"**零缺陷**",显著提升可维护性 |
|
|
|
+| **AI 辅助开发与审查** | 使用 **[coderabbitai](https://www.coderabbit.ai)** 和 **[Copilot](https://github.com/features/copilot)** 辅助编码与代码审查 | **AI辅助开发与审查**,持续提升代码质量,构筑安全防线 |
|
|
|
+| **内存管理优化** | 固定缓冲区 → **动态按需分配** | 采用**按需动态分配**,降低运行内存占用 |
|
|
|
+| **线程安全强化** | 更完善的线程安全 | 支撑复杂线程应用场景,杜绝竞态风险 |
|
|
|
+| **测试体系升级** | 新增 7 大专项测试 | 覆盖广泛场景,全链路内存泄漏检测,强化稳定性与可靠性 |
|
|
|
|
|
|
## 📈 公共 API 变化
|
|
|
|
|
|
@@ -56,6 +37,11 @@ extern RyanMqttError_e RyanMqttSafeFreeSubscribeResources(RyanMqttMsgHandler_t *
|
|
|
|
|
|
// 订阅数量查询
|
|
|
extern RyanMqttError_e RyanMqttGetSubscribeTotalCount(RyanMqttClient_t *client, int32_t *subscribeTotalCount);
|
|
|
+
|
|
|
+// 获取MqttConfig信息
|
|
|
+extern RyanMqttError_e RyanMqttGetConfig(RyanMqttClient_t *client, RyanMqttClientConfig_t **pclientConfig);
|
|
|
+// 安全的释放获取的MqttConfig信息
|
|
|
+extern RyanMqttError_e RyanMqttFreeConfigFromGet(RyanMqttClientConfig_t *clientConfig);
|
|
|
```
|
|
|
|
|
|
### 新增功能价值
|
|
|
@@ -64,7 +50,7 @@ extern RyanMqttError_e RyanMqttGetSubscribeTotalCount(RyanMqttClient_t *client,
|
|
|
| ------------------------ | --------------------- | -------------------------------------- |
|
|
|
| `SubscribeMany` | 批量订阅/取消多个主题 | 减少网络往返,提升吞吐效率 |
|
|
|
| `PublishAndUserData` | 发布消息附带上下文 | 回调中可直接读取用户数据,简化状态管理 |
|
|
|
-| `GetSubscribeSafe` | 安全查询订阅状态 | 多线程场景下无需调用方加锁(内部已同步) |
|
|
|
+| `GetSubscribeSafe` | 安全查询订阅状态 | 内部同步,多线程安全 |
|
|
|
| `GetSubscribeTotalCount` | 获取订阅总数量 | 便于监控与资源调度 |
|
|
|
|
|
|
## 🔧 平台抽象层优化
|
|
|
@@ -75,28 +61,28 @@ extern RyanMqttError_e RyanMqttGetSubscribeTotalCount(RyanMqttClient_t *client,
|
|
|
uint32_t platformUptimeMs(void);
|
|
|
```
|
|
|
|
|
|
-- 跨平台返回系统启动以来的毫秒时间戳
|
|
|
-- 内部已处理 32 位整数回绕问题,确保长时间运行稳定性
|
|
|
+- 跨平台毫秒级运行时间
|
|
|
+- 内部处理 32 位回绕,长时间运行稳定
|
|
|
|
|
|
### 2. 网络收发模型简化
|
|
|
|
|
|
- 收发接口改为**单次调用语义**,减少冗余循环与分支
|
|
|
-- 返回值由`错误码`调整为`实际传输字节数`,更贴近底层行为
|
|
|
-- 异常恢复路径更明确可控
|
|
|
+- 返回实际传输字节数,更贴近底层行为
|
|
|
+- 异常恢复路径更明确
|
|
|
|
|
|
## 🧪 测试体系全面升级
|
|
|
|
|
|
新增 **7 大类专项测试用例**,覆盖从基础功能到极限压力场景的全流程验证:
|
|
|
|
|
|
-| 测试类别 | 测试目标 |
|
|
|
-| ------------------------- | --------------------------------- |
|
|
|
-| 1. 客户端销毁压力测试 | 验证资源释放的幂等性与完整性 |
|
|
|
-| 2. 心跳与超时处理 | Keep-Alive、PINGREQ/RESP 机制验证 |
|
|
|
-| 3. 消息链路完整性 | QoS 0/1/2 消息端到端可靠性验证 |
|
|
|
-| 4. 自动/手动重连机制 | 状态机正确性与连接恢复能力 |
|
|
|
-| 5. 批量/重复订阅测试 | 订阅表一致性、内存安全、去重逻辑 |
|
|
|
-| 6. 多客户端高并发测试 | 20+ 客户端并发运行稳定性 |
|
|
|
-| 7. 单客户端多线程共享测试 | 锁机制、数据一致性、竞态防护 |
|
|
|
+| 测试类别 | 测试目标 |
|
|
|
+| --------------------------------------------------------- | --------------------------------- |
|
|
|
+| 1. 客户端销毁压力测试 | 验证资源释放的幂等性与完整性 |
|
|
|
+| 2. 心跳与超时处理 | Keep-Alive、PINGREQ/RESP 机制验证 |
|
|
|
+| 3. 消息链路完整性(QoS 0/1/2) | QoS 0/1/2 消息端到端可靠性验证 |
|
|
|
+| 4. 自动/手动重连机制 | 状态机正确性与连接恢复能力 |
|
|
|
+| 5. 批量/重复订阅一致性 | 订阅表一致性、内存安全、去重逻辑 |
|
|
|
+| 6. 多客户端高并发 | 20+ 客户端并发运行稳定性 |
|
|
|
+| 7. 单客户端多线程共享(20 线程 × 各 1000 条 QoS1/2 消息) | 锁机制、数据一致性、竞态防护 |
|
|
|
|
|
|
#### 📊 测试覆盖范围
|
|
|
|
|
|
@@ -109,16 +95,17 @@ uint32_t platformUptimeMs(void);
|
|
|
- **可靠性**:长连接、弱网、Keep-Alive、重连机制验证
|
|
|
- **资源安全**:全链路内存泄漏、句柄泄漏检测
|
|
|
|
|
|
-## 📊 代码质量与规范体系
|
|
|
+## 📊 代码质量与规范
|
|
|
|
|
|
#### ✅ 工具链全面集成
|
|
|
|
|
|
-| 工具 | 用途 |
|
|
|
-| ------------------------------------------------------------ | ------------------------------------------ |
|
|
|
-| [ClangFormat](https://clang.llvm.org/docs/ClangFormat.html) | 统一代码风格(LLVM 标准) |
|
|
|
-| [clang-tidy](https://clang.llvm.org/extra/clang-tidy/#clang-tidy) | 静态分析潜在缺陷(空指针、资源泄漏等) |
|
|
|
-| [Cppcheck](https://cppcheck.sourceforge.io/) | 深度扫描内存与资源问题 |
|
|
|
-| 编译器警告 | `-Wall -Wextra -Weffc++ -Weverything` 全开 |
|
|
|
+| 工具 | 用途 |
|
|
|
+| ------------------------------------------------------------ | ---------------------------------------------------------- |
|
|
|
+| **[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` 等编译时检测全部打开 |
|
|
|
|
|
|
#### ✅ 检查重点覆盖
|
|
|
|
|
|
@@ -130,7 +117,7 @@ uint32_t platformUptimeMs(void);
|
|
|
|
|
|
## 🔒 安全性与可靠性全面提升
|
|
|
|
|
|
-- 全面审查公共 API
|
|
|
+- 公共 API 全面审查
|
|
|
- 核心数据结构访问均受同步机制保护
|
|
|
- 动态内存策略更健壮,异常路径也能安全释放
|
|
|
- 输入验证与边界检查更严格,防御性编程增强
|
|
|
@@ -158,9 +145,7 @@ uint32_t platformUptimeMs(void);
|
|
|
> RyanMqtt 2.0 在设计上尽量减少破坏性变更。升级过程极为简单:
|
|
|
>
|
|
|
|
|
|
-从 **V1.x** 升级至 **V2.x** 仅需:
|
|
|
-
|
|
|
-**删除** `RyanMqttClientConfig_t` **结构体中的以下四个字段**:
|
|
|
+从 **V1.x** 升级到 **V2.x** 时,仅需在 `RyanMqttClientConfig_t` 结构体中**移除以下四个已废弃字段**:
|
|
|
|
|
|
```c
|
|
|
char *recvBuffer; // MQTT 接收缓冲区(已废弃)
|
|
|
@@ -169,8 +154,10 @@ uint32_t recvBufferSize; // 接收缓冲区大小(已废弃)
|
|
|
uint32_t sendBufferSize; // 发送缓冲区大小(已废弃)
|
|
|
```
|
|
|
|
|
|
-受影响的接口仅有一个:
|
|
|
+受影响的接口只有一个:
|
|
|
|
|
|
```c
|
|
|
RyanMqttError_e RyanMqttSetConfig(RyanMqttClient_t *client, RyanMqttClientConfig_t *clientConfig);
|
|
|
-```
|
|
|
+```
|
|
|
+
|
|
|
+> 其余 API 与配置保持兼容,无需额外修改即可完成迁移。
|