Quellcode durchsuchen

doc: 更新文档

RyanCW vor 4 Monaten
Ursprung
Commit
23e547b35d
2 geänderte Dateien mit 151 neuen und 120 gelöschten Zeilen
  1. 90 67
      README.md
  2. 61 53
      RyanMqtt2.0发布说明及迁移指南.md

+ 90 - 67
README.md

@@ -1,37 +1,41 @@
 # RyanMqtt
 
-**使用遇到问题可以提 issue / RT-Thread 社区提问,谢谢。**
+📢 **使用过程中遇到问题?欢迎提交 Issue 或在 [RT-Thread 社区](https://club.rt-thread.org/index.html) 提问,感谢支持!**
 
-[RT-Thread-RyanMqtt使用介绍和示例代码(一)RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/51a25ba90fc5e1b5.html)
+- [RT-Thread-RyanMqtt使用介绍和示例代码(一)RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/51a25ba90fc5e1b5.html)
+- [RT-Thread-RyanMqtt QOS质量测试(二)RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/e95c5b9390c53cf3.html)
 
-[RT-Thread-RyanMqtt QOS质量测试(二)RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/e95c5b9390c53cf3.html)
+- [RT-Thread-RyanMqtt 移植指南(三)RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/611b7a947f7221cf.html)
+- [keil使用 RyanMQTT 编译错误(中文编码问题)RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/question/7269a82662b6cf31.html)
 
-[RT-Thread-RyanMqtt 移植指南(三)RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/611b7a947f7221cf.html)
 
-[keil使用 RyanMQTT 编译错误(中文编码问题)RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/question/7269a82662b6cf31.html)
+### 1、介绍
 
+**RyanMqtt** 是一个严格遵循 [MQTT 3.1.1](https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html) 协议标准实现的客户端库,专为资源受限的嵌入式设备设计并优化。
 
-### 1、介绍
+初衷:在使用 [RT-Thread](https://github.com/RT-Thread/rt-thread) 开发过程中,缺乏一个功能完整且稳定可靠的 MQTT 客户端。而 MQTT 又是物联网项目中的核心通信协议。因此,基于标准协议规范与实际项目需求,设计并实现了 RyanMqtt。
+
+#### 主要特性
+
+- ✅ **严格遵循 MQTT 3.1.1 协议标准**
+- ✅ **高质量代码保障** , 引入 **[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)** 辅助编码与代码审查,持续优化代码质量,构建安全防线
+- ✅ **支持多客户端实例**,适用于复杂应用场景
+- ✅ **全等级 QoS 支持(QoS0/1/2)**,并提供**用户可控的消息丢弃机制**,避免因 QoS1/QoS2 消息重传导致内存无限堆积
+- ✅ **完整的主题通配符支持**:`/`、`#`、`+`、`$`
+- ✅ 支持批量订阅 / 取消订阅
+- ✅ 可配置 KeepAlive、自动重连、LWT(遗嘱消息)、Clean Session 等功能
+- ✅ 丰富的参数配置与事件回调接口,满足绝大多数实际项目需求(欢迎提出新需求)
+- ✅**高性能与高并发能力:**经测试,在 Linux 环境下可稳定发送/接收连续 20,000 条 QoS2 消息,
 
-RyanMqtt 实现了 [MQTT 3.1.1](https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html) 协议的客户端。此库针对资源受限的嵌入式设备进行了优化。
-
-初衷:在使用[RT-Thread](https://github.com/RT-Thread/rt-thread)时,没有非常合适的 mqtt 客户端。项目中 mqtt 又是非常核心的功能。参考 MQTT3.1.1 标准和项目需求设计的 mqtt 客户端,它拥有以下特点。
-
-- **严格遵循 [MQTT 3.1.1](https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.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)** 进行代码审查,持续提升代码质量,构筑安全防线
-- 支持多客户端
-- **稳定的全 QOS 等级实现消息实现**。**用户可控的消息丢弃机制**,避免 Qos2 / Qos1 消息无限堆积重发消耗的内存空间
-- **完整的 MQTT 主题通配符支持,“/”、“#”、“+”、“$”**
-- 支持批量订阅 / 取消订阅
-- 可选择的 keepalive、reconnect、lwt、session 等
-- 客户端多功能参数配置,丰富的用户可选的事件回调,满足实际项目的绝大部分需求(欢迎提需求)
-- 优化过的并发能力,**无等待的连续 20000 条 RyanMqttQos2 消息稳定发送和接收无一丢包**(测试环境为linux,实际情况会受到单片机内存大小和网络硬件的收发能力的影响)
-- **复杂线程环境下稳定运行**,已在公司多个项目使用
-- 跨平台,只需实现少量的平台接口即可
-- 资源占用少,依赖少
-- 没有内置 TLS 支持,用户可以在platform层实现 TLS(使用 TLS 的项目也不会只有 mqtt 使用,用户自己实现可以防止 TLS 模块间冲突)
-- **不支持裸机平台**,裸机想要稳定的 [MQTT 3.1.1](https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html) 实现可以参考[coreMQTT](https://github.com/FreeRTOS/coreMQTT)
+  无一丢包。
+
+  > ⚠️ 实际性能受单片机内存大小及网络硬件能力影响
+- ✅ **复杂线程环境下稳定运行**,已在多个商业项目中长期使用验证
+- ✅ **跨平台设计**,仅需实现少量平台接口即可移植
+- ✅ **低资源占用,依赖极少**
+- ❌ **无内置 TLS 支持**:TLS 需由用户在平台层自行实现(避免模块冲突,适配多业务共用 TLS 的场景)
+- ❌ **不支持裸机平台**:建议裸机系统使用 coreMQTT 等更适合无操作系统环境的实现
 
 ### 2、设计
 
@@ -39,40 +43,42 @@ RyanMqtt 设计时参考了[mqttclient](https://github.com/jiejieTop/mqttclient)
 
 ![组](docs/assert/README.assert/%E7%BB%84.png)
 
-- **平台兼容层**封装不同操作系统内核接口,方便实现跨平台
-- **核心库**基于 [coreMQTT](https://github.com/FreeRTOS/coreMQTT) 实现 MQTT 报文序列化与处理
-- **核心线程**是每个客户端必须创建的线程,统一处理客户端所有的操作,比如 mqtt 状态机、事件回调、心跳保活、消息解析、消息超时处理、消息重发等
-- **系统服务管理模块**提供 RyanMqtt 实现功能的工具,包含 session 状态、事件处理、通配符匹配、消息链表等
-- **用户应用模块**提供给用户调用的丰富的接口,包含 RyanMqtt 客户端申请 / 销毁、mqtt 多参数配置、事件注册 / 注销、QOS 消息丢弃、 mqtt 连接 / 停止 / 重连 / 发布 / 订阅 / 取消订阅等
+| 模块                 | 说明                                                         |
+| -------------------- | ------------------------------------------------------------ |
+| **平台兼容层**       | 封装不同操作系统内核接口,实现跨平台支持                     |
+| **核心库**           | 基于 [coreMQTT](https://github.com/FreeRTOS/coreMQTT) 实现 MQTT 报文的序列化与解析 |
+| **核心线程**         | 每个客户端独占一个线程,统一处理状态机、事件回调、心跳保活、消息解析、超时重传等逻辑 |
+| **系统服务管理模块** | 提供会话管理、事件调度、通配符匹配、消息链表管理等基础服务   |
+| **用户应用模块**     | 向用户提供完整的 API 接口,包括客户端生命周期管理、连接控制、发布/订阅、事件注册等 |
 
 ### 3、平台接口
 
-_RyanMqtt 库希望应用程序为以下接口提供实现:_
+_RyanMqtt 依赖于用户实现以下三类平台接口,以确保在不同系统中正常运行。_
 
-#### system 接口
+#### System 接口(RTOS 必需)
 
 _RyanMqtt 需要 RTOS 支持,必须实现如下接口才可以保证 mqtt 客户端的正常运行_
 
-| 函数名称                | 函数简介       |
-| ----------------------- | -------------- |
-| platformMemoryMalloc    | 申请内存       |
-| platformMemoryFree      | 释放已申请内存 |
-| platformDelay           | 毫秒延时       |
-| platformPrint           | 打印字符串     |
-| platformThreadInit      | 初始化线程     |
-| platformThreadDestroy   | 销毁线程       |
-| platformThreadStart     | 开启线程       |
-| platformThreadStop      | 挂起线程       |
-| platformMutexInit       | 初始化互斥锁   |
-| platformMutexDestroy    | 销毁互斥锁     |
-| platformMutexLock       | 获取互斥锁     |
-| platformMutexUnLock     | 释放互斥锁     |
-| platformCriticalInit    | 初始化临界区   |
-| platformCriticalDestroy | 销毁临界区     |
-| platformCriticalEnter   | 进入临界区     |
-| platformCriticalExit    | 退出临界区     |
-
-#### network 接口
+| 函数名称                | 函数简介     |
+| ----------------------- | ------------ |
+| platformMemoryMalloc    | 动态内存分配 |
+| platformMemoryFree      | 释放内存     |
+| platformDelay           | 毫秒延时     |
+| platformPrint           | 打印字符串   |
+| platformThreadInit      | 初始化线程   |
+| platformThreadDestroy   | 销毁线程     |
+| platformThreadStart     | 开启线程     |
+| platformThreadStop      | 挂起线程     |
+| platformMutexInit       | 初始化互斥锁 |
+| platformMutexDestroy    | 销毁互斥锁   |
+| platformMutexLock       | 获取互斥锁   |
+| platformMutexUnLock     | 释放互斥锁   |
+| platformCriticalInit    | 初始化临界区 |
+| platformCriticalDestroy | 销毁临界区   |
+| platformCriticalEnter   | 进入临界区   |
+| platformCriticalExit    | 退出临界区   |
+
+### Network 接口(网络通信必需)
 
 _RyanMqtt 依赖于底层传输接口 API,必须实现该接口 API 才能在网络上发送和接收数据包_
 
@@ -87,29 +93,29 @@ _MQTT 协议要求基础传输层能够提供有序的、可靠的、双向传
 | platformNetworkSendAsync | 非阻塞发送数据           |
 | platformNetworkClose     | 断开 mqtt 服务器连接     |
 
-#### time 接口
+> 🔐 如需 TLS 加密,请在 `platformNetworkConnect` 等接口中集成 TLS 层(如 mbedTLS、wolfSSL 等)
+
+### Time 接口
 
 _RyanMqtt 依靠函数生成毫秒时间戳,用于计算持续时间和超时,内部已经做了数值溢出处理_
 
-| 函数名称         | 函数简介                 |
-| ---------------- | ------------------------ |
-| platformUptimeMs | 自系统启动以来 ms 时间戳 |
+| 函数名称         | 函数简介                     |
+| ---------------- | ---------------------------- |
+| platformUptimeMs | 返回系统启动以来的毫秒时间戳 |
 
 ### 4、示例
 
 #### RT-Thread 平台
 
-- 接口示例请参考 platform/rtthread 文件夹
-
-- RyanMqtt 使用示例请参考 example 文件夹
-
-- 需要使能 SAL,示例使用 socket 接口进行数据收发。
+- 平台接口实现参考:`platform/rtthread/`
 
-- 需要 MSH 组件,示例默认挂载到 MSH 组件
+- 使用示例参考:`example/`
+- 需启用 **SAL(Socket Abstraction Layer)组件**,示例基于 Socket 接口收发数据
+- 需启用 **MSH(命令行组件)**,示例默认集成至 MSH
 
-  **详细使用请参考 example,提供了一些测试接口和使用范例**
+> 📌 **强烈建议参考 `example` 目录中的测试接口与使用范例,获取完整使用指导**
 
-  ![image-20230927112803101](docs/assert/README.assert/image-20230927112803101.png)
+![image-20230927112803101](docs/assert/README.assert/image-20230927112803101.png)
 
 #### 合宙openLuat平台
 
@@ -129,8 +135,25 @@ _RyanMqtt 依靠函数生成毫秒时间戳,用于计算持续时间和超时
 
 ### 5、依赖
 
-暂无
+本项目 **无外部第三方库依赖**,仅依赖用户实现的平台接口。
+
+### 6、免责声明
+
+> ⚠️ **重要提示**
+
+请**勿将本库用于支付、金融交易或其他可能造成重大损失的场景**。
+ 尽管 RyanMqtt 的 QoS2 消息机制经过大量测试验证,但在实际应用中,由于以下因素可能导致消息不可靠:
+
+- 网络波动剧烈甚至无法建立稳定连接
+- MQTT 服务端配置策略(如超时、限流、会话清理)
+- 客户端或服务端资源不足
+
+因此,**不能仅依赖 QoS2 保证数据安全与一致性**。
+ **强烈建议在应用层实现数据校验、幂等处理与最终一致性机制**。
+
+> 🛑 **作者不对因使用本库导致的任何直接或间接损失承担责任。请在深度评估后谨慎使用。**
+
+
 
-### 6、声明
+如需进一步帮助,请访问 [RT-Thread 社区](https://club.rt-thread.org/index.html) 或联系作者。
 
-- 请勿将此库 QOS 消息等级用于**支付等可能造成重大损失**的场景,如需使用请自行**深度评估后使用!!!作者不对使用此库造成的任何损失负责。不要只依靠 qos2 来保证安全!!!**。(尽管此库 RyanMqttQos2 消息等级经过很多测试,但是异步组件由于诸多因素例如波动非常大的网络甚至无法建立稳定连接、mqtt 服务端的策略配置等,无法做到绝对的准确性。需要用户用应用层做到数据的最终一致性。)

+ 61 - 53
RyanMqtt2.0发布说明及迁移指南.md

@@ -1,13 +1,15 @@
 # 🚀 RyanMqtt 2.0 发布
 
-## 📦 升级路线图
+> **更轻、更快、更安全、更可靠**
+
+## 📦 升级路线图概览
 
 | 维度         | 变更类型                                                     | 核心价值                                                     |
 | ------------ | :----------------------------------------------------------- | :----------------------------------------------------------- |
 | **协议栈**   | **[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)** 进行代码审查 | 持续提升代码质量,构筑安全防线                               |
-| **内存管理** | 静态缓冲区 → 动态分配                                        | 按需申请,降低内存占用                                       |
+| **代码规范** | 引入 **[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 大专项测试                                            | 覆盖广泛场景,强化稳定性与可靠性                             |
 
@@ -31,13 +33,13 @@
 
 - 全面审查公共 API 与共享资源访问路径
 - 精细化控制锁粒度,消除竞态并优化性能
-- 针对高并发、多线程、多客户端场景进行专项验证
+- 在高并发、多客户端、多线程场景下通过专项压力测试
 
 ## 📈 公共 API 变化
 
 ### 新增接口
 
-```
+```c
 // 批量订阅/取消订阅
 extern RyanMqttError_e RyanMqttSubscribeMany(RyanMqttClient_t *client, int32_t count,
 					     RyanMqttSubscribeData_t subscribeManyData[]);
@@ -69,12 +71,15 @@ extern RyanMqttError_e RyanMqttGetSubscribeTotalCount(RyanMqttClient_t *client,
 
 ## 🔧 平台抽象层优化
 
-### 1. 统一系统时间接口
+### 1. 统一时间接口
 
-```
-uint32_t platformUptimeMs(void); // 跨平台获取系统启动毫秒数(内部已避免 32 位回绕)
+```c
+uint32_t platformUptimeMs(void);
 ```
 
+- 跨平台返回系统启动以来的毫秒时间戳
+- 内部已处理 32 位整数回绕问题,确保长时间运行稳定性
+
 ### 2. 网络收发模型简化
 
 - 收发接口改为**单次调用语义**,减少冗余循环与分支
@@ -85,86 +90,89 @@ uint32_t platformUptimeMs(void); // 跨平台获取系统启动毫秒数(内
 
 新增 **7 大类专项测试用例**,覆盖从基础功能到极限压力场景的全流程验证:
 
-1. **客户端销毁压力测试**:验证资源释放幂等性与完整性
-2. **心跳与超时处理**:Keep-Alive 场景
-3. **消息链路测试**:QoS 0/1/2 全等级消息完整性验证
-4. **自动/手动重连验证**:确保状态机正确性与连接恢复能力
-5. **批量/重复订阅测试**:订阅表一致性与内存安全
-6. **多客户端高并发测试**:验证在多线程环境下的稳定性
-7. **单客户端多线程共享测试**:锁机制及数据一致性验证
-
-**覆盖范围**:
-
-- **基础连接**:100 次循环连接/断开,涵盖 QoS0/1/2 消息和订阅,直接销毁
-- **消息流控**:QoS0/1/2等级 1000 条消息,混合 QoS 压力测试
-- **订阅管理**:批量、大量、重复、混合 QoS 订阅和取消订阅场景
+| 测试类别                  | 测试目标                          |
+| ------------------------- | --------------------------------- |
+| 1. 客户端销毁压力测试     | 验证资源释放的幂等性与完整性      |
+| 2. 心跳与超时处理         | Keep-Alive、PINGREQ/RESP 机制验证 |
+| 3. 消息链路完整性         | QoS 0/1/2 消息端到端可靠性验证    |
+| 4. 自动/手动重连机制      | 状态机正确性与连接恢复能力        |
+| 5. 批量/重复订阅测试      | 订阅表一致性、内存安全、去重逻辑  |
+| 6. 多客户端高并发测试     | 20+ 客户端并发运行稳定性          |
+| 7. 单客户端多线程共享测试 | 锁机制、数据一致性、竞态防护      |
+
+#### 📊 测试覆盖范围
+
+- **基础连接**:100 次循环连接/断开,混合 QoS 消息与订阅
+- **消息流控**:连续发送QoS0/1/2等级 1000 条消息,混合 QoS 压力测试
+- **订阅管理**:批量、大量、重复、混合 QoS 订阅与取消
 - **并发压测:**
   - 单客户端 20 线程 × 各 1000 条 QoS1/2 消息
   - 多客户端 20 并发实例进行双向发布/订阅
 - **可靠性**:长连接、弱网、Keep-Alive、重连机制验证
-- **资源安全**:全链路内存句柄泄漏检测
+- **资源安全**:全链路内存泄漏、句柄泄漏检测
 
 ## 📊 代码质量与规范体系
 
-### 工具链全面集成
-
-- **clang-format**:遵循 LLVM 风格统一代码格式
-- **clang-tidy**:静态分析潜在缺陷
-- **cppcheck**:深度扫描内存与资源问题
-- **编译警告全开**:`-Wall -Wextra -Weffc++ -Weverything`
+#### ✅ 工具链全面集成
 
-### 检查覆盖重点
+| 工具                                                         | 用途                                       |
+| ------------------------------------------------------------ | ------------------------------------------ |
+| [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` 全开 |
 
-- ✅ 内存安全(防止泄漏、越界、悬空指针)
-- ✅ 性能优化(减少低效算法与冗余拷贝)
-- ✅ 代码可读性(命名规范、注释完整性)
+#### ✅ 检查重点覆盖
 
-> **成果**:语法与逻辑缺陷接近零,长期维护成本显著降低
+- 内存安全:杜绝泄漏、越界、悬空指针
+- 性能优化:减少冗余拷贝与低效算法
+- 可读性:命名规范、注释完整、逻辑清晰
 
-## 🔒 安全性与可靠性提升
+> ✅ **成果**:实现接近语法级“零缺陷”,长期维护成本大幅降低
 
-- 公共 API 全面通过线程安全审查
-- 核心数据结构访问均具备同步保护
+## 🔒 安全性与可靠性全面提升
 
-- 动态内存策略更健壮
-- 输入验证与边界检查更严格
-- 析构路径保证**资源 100% 释放**
-- 改进网络异常处理与状态管理,提升弱网适应性
+- 全面审查公共 API
+- 核心数据结构访问均受同步机制保护
+- 动态内存策略更健壮,异常路径也能安全释放
+- 输入验证与边界检查更严格,防御性编程增强
+- 网络异常处理更完善,弱网环境下连接恢复更快
 - 错误恢复路径更稳健,超时策略更精准
 
 ## 🎉 总结
 
 本次 RyanMqtt 2.0 是一次具有里程碑意义的升级:
 
-1. **技术栈现代化**:迁移至 **[coreMQTT](https://github.com/FreeRTOS/coreMQTT)**,拥抱未来
+1. **技术栈现代化**:迁移至 **[coreMQTT](https://github.com/FreeRTOS/coreMQTT)**,拥抱更活跃的生态与未来扩展能力
 
 2. **架构更清晰**:模块高度解耦,抽象设计更合理
 
-3. **质量更可信**:7 类专项测试 、 静态分析、AI审查构筑强大防线
+3. **质量更可信**:7 类专项测试 +静态分析+AI审查构筑强大防线
 
-4. **性能再优化**:动态内存与批量操作优化吞吐与响应
+4. **性能再优化**:更低资源占用、更高吞吐效率
 
-5. **维护更轻松**:统一规范与平台抽象降低长期成本
+5. **维护更轻松**:统一代码规范规范、平台抽象降低长期开发成本
 
    
 
 # 🔄 从 1.x 迁移至 2.x
 
-RyanMqtt 在版本演进中尽量减少破坏性变更。 
+> RyanMqtt 2.0 在设计上尽量减少破坏性变更。升级过程极为简单:
+>
 
 从 **V1.x** 升级至 **V2.x** 仅需:
 
 **删除** `RyanMqttClientConfig_t` **结构体中的以下四个字段**:
 
-```
-char *recvBuffer;        // MQTT 接收缓冲区
-char *sendBuffer;        // MQTT 发送缓冲区
-uint32_t recvBufferSize; // MQTT 接收缓冲区大小
-uint32_t sendBufferSize; // MQTT 发送缓冲区大小
+```c
+char *recvBuffer;        // MQTT 接收缓冲区(已废弃)
+char *sendBuffer;        // MQTT 发送缓冲区(已废弃)
+uint32_t recvBufferSize; // 接收缓冲区大小(已废弃)
+uint32_t sendBufferSize; // 发送缓冲区大小(已废弃)
 ```
 
-受影响的接口仅
+受影响的接口仅有一个
 
-```
+```c
 RyanMqttError_e RyanMqttSetConfig(RyanMqttClient_t *client, RyanMqttClientConfig_t *clientConfig);
 ```