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
-
物聯網
+關注
關注
2947文章
47904瀏覽量
416009 -
軟件
+關注
關注
69文章
5339瀏覽量
91661 -
RT-Thread
+關注
關注
32文章
1620瀏覽量
44956
發布評論請先 登錄
手搓一個RT-Thread工地巡檢機器人要幾步? | 技術集結
基于RT-Thread的簡單物聯網溫控箱 | 技術集結
元服務發布選擇待發布軟件包
RT-Thread studio打不開 RT-thread setting界面怎么解決?
為智能汽車打造“安全+效率+生態”內核,RT-Thread睿賽德重磅發布車控白皮書
請問RT-Thread Studio更新軟件包為什么不成功?
Windows上使用ENV工具開發基于先楫MCU的RT-Thread應用
在Ubuntu上開發基于先楫MCU的RT-Thread應用指南
【好書推薦】RT-Thread第20本相關書籍!《嵌入式實時操作系統RT-Thread原理與應用》| 技術集結
用SPI玩轉WiFi,RT-Thread ESP-Hosted驅動深度適配指南 | 技術集結
RT-Thread BSP全面支持玄鐵全系列RISC-V 處理器 | 技術集結
讓開發板暢游網絡:RT-Thread CherryUSB 驅動 RNDIS 模塊詳解 | 技術集結
RT-Thread軟件包,RyanMqtt 2.0 發布,全面重構:更輕、更快、更安全、更可靠 | 技術集結
評論