Tags: lib3yu/innet
Tags
feat: 重构 innet 库,简化 API 并优化线程安全模型
此次提交对 innet 发布-订阅库进行了重大重构,旨在简化接口、提升代码健壮性并优化性能。
**核心变更:**
* **API 简化与清理:**
* 移除了 `innet_publish_signal`, `innet_publish_signal_async`, `innet_notify`, `innet_pull` 等复杂功能,使库更专注于核心的发布/订阅模式。
* `innet_subscribe` 现在直接接受发布者名称,移除了 `innet_subscribe_name`。
* `innet_publish` 增加了超时参数 `timeout_ms`,用于处理阻塞策略下的发布。
* 重构了 `innet_node_conf_t`,移除了 `notify_size_check` 字段。
* 新增 `innet_subscriber_num` 和简化版 `innet_inbox_len` 用于获取运行时信息。
* **架构与实现优化:**
* 引入了 `Inbox` 类,将收件箱的逻辑(包括容量、丢弃策略、阻塞等待)封装起来,代码更清晰、更易于维护。
* 使用 `NodeMgr` 和 `PendingMgr` 单例类管理全局节点和待定订阅,替代了全局变量和复杂的读写锁。
* 移除了独立的异步信号处理线程及其相关代码,大幅简化了线程模型。
* 新增 `innet_lock.hpp`,提供了 `Mutex`, `RWLock`, `CondVar` 等 C++ RAII 风格的封装,提升了代码安全性和可读性。
* 为 C++11 编译器提供了 `std::make_unique` 的兼容性实现。
* **构建与示例更新:**
* 更新 `Makefile` 和 `examples/Makefile`,将 C++ 标准从 C++17 降级为 C++11 以提高兼容性,并添加了调试符号。
* 将旧的 `demo.c` 拆分为两个更清晰的示例:`demo_industry.c` (工业控制模拟) 和 `demo_pubsub.c` (基础发布/订阅演示)。
* 在 `README.md` 中更新了构建指令、API 概览和示例说明,移除了已删除功能的文档。
* 新增 `.roo/rules/01-general.md` 文件,提供了快速编译和运行 Demo 的指令。