34 个版本
0.18.2 | 2024年7月24日 |
---|---|
0.18.0 | 2023年10月30日 |
0.16.1 | 2023年6月24日 |
0.16.0 | 2022年4月11日 |
0.1.0 | 2015年11月30日 |
#51 在 编码 类别中
每月下载量 69,486
在 47 个 包中使用 (直接使用 29 个)
1.5MB
50K SLoC
ipc-channel
📚 文档 📚
概述
ipc-channel
是 Rust 通道 API (一种通信顺序进程的方式,CSP) 的实现,它基于本机操作系统抽象。在底层,此 API 使用 Mac 上的 Mach 端口和 Linux 上通过 Unix 套接字的文件描述符传递。使用 serde
库来对传输中的值进行序列化。
尽可能的,ipc-channel
被设计成 Rust 通道的直接替代方案。Rust 通道 API 到 ipc-channel
API 的映射如下
channel()
→ipc::channel().unwrap()
Sender<T>
→ipc::IpcSender<T>
(需要T: Serialize
)Receiver<T>
→ipc::IpcReceiver<T>
(需要T: Deserialize
)
请注意,IpcSender<T>
和 IpcReceiver<T>
都实现了 Serialize
和 Deserialize
,因此您可以在 IPC 通道之间自由地发送 IPC 通道,就像使用 Rust 通道一样。
使您的类型实现 Serialize
和 Deserialize
的最简单方法是使用从 crates.io 的 serde_macros
crate 作为插件,然后使用 #[derive(Deserialize, Serialize])
注释您想要发送的类型。在许多情况下,这就可以了——编译器会生成保存和恢复您的类型实例所需的所有繁琐的样板代码。
为了在进程间启动 IPC 连接,您创建一个 IpcOneShotServer
类型的实例,注册一个全局名称,将此名称传递到客户端进程(可能通过环境变量或命令行标志),并在客户端连接到服务器。有关如何使用 Unix fork()
来生成进程的示例,请参阅 test.rs
中的 cross_process_embedded_senders()
。
主要缺失的功能
- 服务器一次只接受一个客户端。如果您只是想使用此 API 将应用程序拆分成固定数量的互不信任的进程,这很好,但它不适合实现系统服务。如果需要,以后可能会添加多客户端的 API。
依赖关系
~1–41MB
~635K SLoC