变体选择
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_shm、onepath_shm_pool_create、onepath_publisher_put_shm | 头文件中声明消失 |
| 高级发布 / 订阅 | onepath_declare_advanced_publisher、onepath_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 |
# 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 appWARNING
未定义 CONFIG_ONEPATH_VARIANT_FULL=1 或 CONFIG_ONEPATH_VARIANT_TINY=1 之一时,onepath.h 会 #error。若用 pkg-config,变体宏会被自动带上,无需手写——详见 安装与集成。
底层通信引擎已静态内嵌进各自的 .so,运行时零外部依赖。链接一个 OnePath 库即可,无需额外安装任何运行时组件。