尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Rerun C SDK 实战:用 rr_spawn 启动 Rerun Viewer 进程并监听 gRPC 连接

发布时间:2026/9/17 4:57:22

资讯中心
01
ARTICLE

Rerun C SDK 实战:用 rr_spawn 启动 Rerun Viewer 进程并监听 gRPC 连接

Rerun C SDK 实战:用 rr_spawn 启动 Rerun Viewer 进程并监听 gRPC 连接
Rerun C SDK 实战用 rr_spawn 启动 Rerun Viewer 进程并监听 gRPC 连接【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun导读本文以仓库中的 C 语言示例 spawn_viewer 为主线讲解如何在 C 程序中通过 Rerun C SDK 的rr_spawn函数启动一个独立的 Rerun Viewer 进程使其就绪后监听 gRPC 端口供随后的录制数据流连接。读完本文你将掌握rr_spawn的调用方式、错误处理约定、底层实现链路以及可自定义的 Viewer 启动选项端口、内存上限、可执行文件路径等并能据此在自己的 C 项目中无缝嵌入 Rerun 可视化能力。示例概述一行 C 代码拉起 Viewer该示例的核心目标非常明确启动一个全新的 Rerun Viewer 进程该进程准备好监听 gRPC 连接并借助 PATH 中可用的可执行文件完成启动。完整示例仅有 main.c 一个源文件运行方式为make run在仓库中这一主题在三种语言下均有对等示例README 描述完全一致C 版本examples/c/spawn_viewerC 版本examples/cpp/spawn_viewerRust 版本examples/rust/spawn_viewer源码逐行解析rr_spawn 的调用与错误处理main.c 的完整实现如下#include rerun.h #include stdio.h int main(void) { rr_error error {}; rr_spawn(NULL, error); if (error.code ! 0) { printf(Error occurred: %s\n, error.description); return 1; } }整个程序只有三步声明错误结构体rr_error error {};以零初始化错误对象这是 Rerun C API 的通用约定——所有可能失败的接口都会接收一个rr_error *输出参数调用rr_spawn(NULL, error)NULL表示使用全部默认的 Viewer 启动选项不传入自定义rr_spawn_optionsViewer 进程由 SDK 负责派生检查错误码若error.code ! 0打印error.description并返回非零退出码否则正常退出。该示例刻意不做后续的数据发送仅验证「spawn 一个 Viewer 进程」这一最小链路。若 spawn 失败例如 PATH 中找不到rerun可执行文件程序会在终端输出具体失败原因并以状态码 1 退出方便在脚本中捕获失败。底层实现rr_spawn 在 Rust SDK 中的调用链rr_spawn是 Rerun C SDKRust 编写的 FFI 层导出的 C ABI 符号其实现位于 crates/top/rerun_c/src/lib.rsfn rr_spawn_impl(spawn_opts: *const CSpawnOptions) - Result(), CError { let spawn_opts if spawn_opts.is_null() { re_sdk::SpawnOptions::default() } else { let spawn_opts ptr::try_ptr_as_ref(spawn_opts, spawn_opts)?; spawn_opts.as_rust()? }; // Port is unused here — this function only spawns the viewer process. // The C SDK connects separately via rr_recording_stream_spawn. re_sdk::spawn(spawn_opts) .map(drop) .map_err(|err| CError::new(CErrorCode::RecordingStreamSpawnFailure, err.to_string()))?; Ok(()) } #[unsafe(no_mangle)] pub extern C fn rr_spawn(spawn_opts: *const CSpawnOptions, error: *mut CError) { if let Err(err) rr_spawn_impl(spawn_opts) { err.write_error(error); } }从源码可以提炼出几个关键实现事实空指针即默认选项当 C 侧传入NULL时Rust 侧会退化为re_sdk::SpawnOptions::default()这与示例中rr_spawn(NULL, error)的用法一一对应错误映射spawn 过程一旦失败会被统一包装为CErrorCode::RecordingStreamSpawnFailure错误码连同可读的错误信息字符串一起写入rr_error这正是 main.c 中error.code ! 0分支所能捕获的错误来源职责划分明确源码注释明确指出rr_spawn只负责派生 Viewer 进程本身端口在这里并不使用C SDK 后续的数据连接由独立的rr_recording_stream_spawn接口完成。也就是说示例展示的是「先拉起 Viewer」这一步随后录制流可以再以相同或更高的端口与这个 Viewer 建立 gRPC 连接。启动选项详解rr_spawn_options / SpawnOptions 全部字段虽然示例使用了NULL全默认值但rr_spawn也接受自定义选项。C 头文件 rerun.h 中的rr_spawn_options与 C 侧的 SpawnOptions 保持同步头文件注释明确要求两者一致其字段及默认值如下字段默认值说明port9876Viewer 的 gRPC 服务监听端口Rust 实现注释表明在rr_spawn路径下该端口当前未实际使用memory_limit75%Viewer 进程内存上限达到上限后 Rerun 会丢弃最旧的数据可写为16GB或50%系统总内存百分比等格式server_memory_limit1GiB与 Viewer 同进程运行的 gRPC 服务器的内存上限超限同样丢弃最旧数据hide_welcome_screenfalse是否隐藏 Rerun 的正常欢迎界面detach_processtrue是否将 Viewer 进程从应用进程中分离默认分离应用退出不影响 Viewerexecutable_namererun要启动的 Rerun 可执行文件名称Windows 上可省略.exe后缀executable_path空显式指定某个可执行文件的完整路径替代在 PATH 中按executable_name搜索其中executable_name与executable_path直接对应了示例描述中的 using an executable available in PATH——默认行为就是在 PATH 中查找名为rerun的可执行文件而executable_path则提供了一条绕过 PATH 搜索、强制指定路径的逃生通道适合 Viewer 二进制被安装到非标准位置或在 CI 中固定版本时使用。memory_limit/server_memory_limit的字符串格式支持绝对值如16GB与百分比如50%两种写法若格式非法Rust 侧还存在专门的CErrorCode::InvalidMemoryLimit错误码。跨语言对照C / C / Rust 的 spawn 写法同一主题在三种语言下各有一个最小示例便于对照学习C本示例main.crr_error error {}; rr_spawn(NULL, error); if (error.code ! 0) { printf(Error occurred: %s\n, error.description); return 1; }Cmain.cpp#include rerun.hpp int main() { rerun::spawn().exit_on_failure(); }C 侧使用 RAII 风格的rerun::spawn()并通过exit_on_failure()在失败时直接退出是 C 语言手动检查rr_error的语义等价封装。Rustexamples/rust/spawn_viewer运行方式为cargo run --release -p spawn_viewer三种语言对应关系清晰C API 的rr_spawn(NULL, error)↔ C 的rerun::spawn()↔ Rust SDK 的re_sdk::spawn(SpawnOptions::default())底层最终都会汇聚到re_sdk::spawn这一 Rust 核心实现。构建与运行C 示例通过make run一键构建并运行前提是已构建并安装 Rerun C SDK提供rerun.h头文件与rerun_c链接库已安装 Rerun Viewer 可执行文件且其名称位于 PATH 中默认查找rerun也可通过executable_path显式指定。运行成功后屏幕上会弹出一个新的 Rerun Viewer 窗口默认detach_process true独立于示例进程运行随后便可通过 gRPC 向该 Viewer 推送数据。若运行时未见窗口或程序以退出码 1 结束可检查终端输出的error.description判断是 PATH 中缺少rerun、可执行文件版本不匹配还是端口被占用等具体原因。小结spawn_viewer示例虽短却完整演示了 Rerun C SDK 的进程派生能力rr_spawn(NULL, error)一行调用即可在 PATH 中定位 Viewer 可执行文件、以默认或自定义选项拉起独立 Viewer 进程并使其就绪监听 gRPC 连接。结合 crates/top/rerun_c/src/lib.rs 的 FFI 实现与 spawn_options.hpp 中的字段定义开发者可以据此进一步定制端口、内存上限、欢迎页与进程分离行为将 Rerun 可视化无缝嵌入任意 C 项目中。【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。