1 个不稳定版本
0.1.0 | 2023 年 4 月 9 日 |
---|
#169 in #ipc
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