#ipc #inter-process #message #cross-platform #sockets #built #generic

ipc_util

基于 interprocess 库构建的简单跨平台通用 IPC 消息传递

1 个不稳定版本

0.1.0 2023 年 4 月 9 日

#169 in #ipc

MIT 许可证

15KB
173

ipc-util

提供基于 interprocess 库构建的简单跨平台通用 IPC 消息传递。

安装

将以下内容添加到您的 Cargo.toml

[dependencies]
ipc_util = "0.1"

使用方法

定义您的套接字路径和一个返回当前平台正确路径的函数

use ipc_util::*;
use interprocess::local_socket::NameTypeSupport;

pub const MY_SOCKET_PATH: &str = "/tmp/my-socket.sock";
pub const MY_SOCKET_NAMESPACE: &str = "@my-socket.sock";

pub fn get_ipc_name() -> &'static str {
    use NameTypeSupport::*;
    match NameTypeSupport::query() {
        OnlyPaths => MY_SOCKET_PATH,
        OnlyNamespaced | Both => MY_SOCKET_NAMESPACE,
    }
}

确保您想要通过套接字发送的类型可以正确地进行反序列化

#[derive(Serialize, Deserialize)]
pub enum Message {
    Text { text: String },
    Ping,
    Pong,
}

有三个函数可以用来作为客户端向 IPC 服务器发送消息

  • send_ipc_message 函数连接到套接字并通过它发送任意可序列化对象。
  • send_ipc_query 函数连接到套接字,发送任意可序列化对象,并读取一个任意可反序列化对象作为响应。

有两个函数可以用来创建 IPC 服务器线程

  • start_ipc_listener 函数用于创建一个 IPC 服务器线程,该线程使用一个回调函数,该回调函数直接接收一个 LocalSocketStream,如 stream 示例 所示。
  • start_ipc_server 函数是 start_ipc_listener 的包装,其中回调函数接收一个任意可序列化对象 TRequest 并返回一个 Option<TResponse>。当返回响应时,它会发送回客户端。这可以在 服务器示例 中看到。

建议使用 start_ipc_server 及其连接回调函数的 Option<T> 返回类型,其中返回 Some 变体会将该对象作为响应发送回客户端。这是为了与期望响应的 send_ipc_query 函数相匹配,而返回 None 的回调将匹配来自客户端的 send_ipc_message 调用。

依赖关系

~1.8–2.8MB
~60K SLoC