Skip to content

变体选择

OnePath 提供两个产物变体,覆盖从云端到微控制器的全栈。两者共享同一份头文件 onepath.h同一套应用代码,你只需在编译时用一个宏切换。

full vs tiny

变体产物(release)典型体量适用场景能力
完整版(full)libonepath-full.so约 15 MB桌面 / 服务器全功能:含同机零拷贝(SHM)、TLS、高级发布订阅、JSON5 配置、用户名密码认证
精简版(tiny)libonepath-tiny.so约 330 KB嵌入式 / 边缘网关,尺寸敏感核心功能齐全 + JSON5 配置 + TLS

两个变体的核心能力完全一致——会话、发布 / 订阅、查询、请求 / 响应、存活感知、自动发现、JSON5 配置、链路追踪与指标、网络拓扑感知、多模冗余 XMR,在两边行为相同、用法一致。

怎么选

桌面 / 服务器,或需要同机零拷贝、高级发布订阅、用户名密码认证 → full。 嵌入式 / 边缘网关、对二进制尺寸敏感 → tiny。 同一套业务代码,既能在数据中心跑 full,也能在资源受限的边缘设备上跑 tiny,并接入同一张逻辑网络。

full 独占能力与编译期剔除

完整版独占 3 组 API,在精简版下于 onepath.h 中即被声明剔除

能力组代表接口tiny 下表现
同机零拷贝(SHM)onepath_config_enable_shmonepath_shm_pool_createonepath_publisher_put_shm头文件中声明消失
高级发布 / 订阅onepath_declare_advanced_publisheronepath_subscribe_advanced头文件中声明消失
用户名密码认证onepath_config_set_auth头文件中声明消失

这意味着:在 tiny 变体下误用这些接口,会在编译期直接报错(符号未声明),而不是等到运行期才返回 ONEPATH_ERR_UNSUPPORTED。这是一种刻意设计的能力边界——可移植性问题在编译那一刻就暴露,而非埋到线上。

注意区分

TLS(onepath_config_set_tls_ca,v0.8.0 起)与网络拓扑感知(onepath_topology_*两个变体均支持,不属于 full 独占。

三种构建类型

每个变体都提供三种构建类型,按部署目标选择:

构建类型优化用途
debug-O0 -g3开发 / 调试,断点与调用栈清晰可单步
release-O2生产部署,性能优先
minsizerel-Os嵌入式 / 容器镜像,尺寸优先

「变体」与「构建类型」是两个正交维度:例如「tiny + minsizerel」是体量最小的组合,「full + debug」便于在服务器上调试。

如何用编译宏切换

用户代码通过宏选择变体,并链接对应的库:

变体编译宏链接
full-DCONFIG_ONEPATH_VARIANT_FULL=1-lonepath-full
tiny-DCONFIG_ONEPATH_VARIANT_TINY=1-lonepath-tiny
bash
# full
gcc -DCONFIG_ONEPATH_VARIANT_FULL=1 -lonepath-full app.c -o app

# 切到 tiny —— 同一份 app.c,只改宏与链接目标
gcc -DCONFIG_ONEPATH_VARIANT_TINY=1 -lonepath-tiny app.c -o app

WARNING

未定义 CONFIG_ONEPATH_VARIANT_FULL=1CONFIG_ONEPATH_VARIANT_TINY=1 之一时,onepath.h#error。若用 pkg-config,变体宏会被自动带上,无需手写——详见 安装与集成

底层通信引擎已静态内嵌进各自的 .so运行时零外部依赖。链接一个 OnePath 库即可,无需额外安装任何运行时组件。

OnePath™ 以预构建库形式交付,运行时零外部依赖。