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编码 类别中

Download history 10683/week @ 2024-05-03 9883/week @ 2024-05-10 21143/week @ 2024-05-17 21074/week @ 2024-05-24 19066/week @ 2024-05-31 20614/week @ 2024-06-07 21499/week @ 2024-06-14 22402/week @ 2024-06-21 16353/week @ 2024-06-28 19063/week @ 2024-07-05 16879/week @ 2024-07-12 17495/week @ 2024-07-19 16134/week @ 2024-07-26 18493/week @ 2024-08-02 17004/week @ 2024-08-09 14937/week @ 2024-08-16

每月下载量 69,486
47 包中使用 (直接使用 29 个)

MIT/Apache

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> 都实现了 SerializeDeserialize,因此您可以在 IPC 通道之间自由地发送 IPC 通道,就像使用 Rust 通道一样。

使您的类型实现 SerializeDeserialize 的最简单方法是使用从 crates.io 的 serde_macros crate 作为插件,然后使用 #[derive(Deserialize, Serialize]) 注释您想要发送的类型。在许多情况下,这就可以了——编译器会生成保存和恢复您的类型实例所需的所有繁琐的样板代码。

为了在进程间启动 IPC 连接,您创建一个 IpcOneShotServer 类型的实例,注册一个全局名称,将此名称传递到客户端进程(可能通过环境变量或命令行标志),并在客户端连接到服务器。有关如何使用 Unix fork() 来生成进程的示例,请参阅 test.rs 中的 cross_process_embedded_senders()

主要缺失的功能

  • 服务器一次只接受一个客户端。如果您只是想使用此 API 将应用程序拆分成固定数量的互不信任的进程,这很好,但它不适合实现系统服务。如果需要,以后可能会添加多客户端的 API。

依赖关系

~1–41MB
~635K SLoC