主要观点:Nix 守护进程使用自定义二进制协议(Nix 守护进程协议)与各种事物通信,该协议无规范或参考文档,作者团队重新用 Rust 实现了该协议,包括协议两端,旨在记录和阐明协议、实现新的调试和可观察性以及赋能其他第三方 Nix 客户端和服务器。
关键信息:
- Nix 通信始于交换一些魔术字节和版本协商,主协议循环由客户端发起,包含操作和结果交互等。
- Nix 有线格式简单,有两种基本类型,复合类型以此构建,“framed data”用于处理大文件。
- Serde 是 Rust 中序列化和反序列化的事实上的标准,用于实现 Nix 协议的序列化。
- 使用 Serde 存在一些与 Nix 协议数据模型的不匹配,需进行处理。
重要细节: - Nix 守护进程在不同场景下与其他部分通信的方式,如本地和远程构建时。
- 各种协议元素的具体格式,如“valid path info”的有线格式示例。
- Serde 实现 Nix 协议序列化时的具体代码示例和遇到的问题及解决方法。
- 目前实现仍在进行中,存在 API 待完善等问题,已在 crates.io 上提供相关 crate,且正在将实验转向与 Bazel 远程执行集成等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。