15 个版本 (7 个破坏性更新)
0.8.1 | 2023 年 5 月 1 日 |
---|---|
0.7.2 | 2023 年 4 月 25 日 |
0.6.0 | 2023 年 4 月 15 日 |
0.5.2 | 2023 年 4 月 15 日 |
0.1.1 | 2019 年 5 月 30 日 |
#931 in 网络编程
每月 68 次下载
用于 door-macros
59KB
790 行
Rusty Doors
此包的目标是在 Rust 中公开 illumos Doors API。它直接公开了本机 doors API,并提供了某些相对安全的抽象。
什么是 Doors?
门 是一种类似于命名管道或 UNIX 域套接字的文件机制,用于进程间通信。如果 door 服务器在文件系统中提供了一个 door,客户端程序可以调用 door 服务器中的函数(称为 服务器过程)。
服务器过程 是 door 服务器程序中的一个具有特殊、预定义签名的函数。它是创建(或唤醒)以处理客户端 door 调用的线程的入口点。
门服务器 是一个已从其 服务器过程 中创建 门 的进程。
示例
一个简单的服务器过程,可能看起来像这样
use doors::server::Door;
use doors::server::Request;
use doors::server::Response;
#[doors::server_procedure]
fn double(x: Request) -> Response<[u8; 1]> {
if x.data.len() > 0 {
return Response::new([x.data[0] * 2]);
} else {
// We were given nothing, and 2 times nothing is zero...
return Response::new([0]);
}
}
let door = Door::create(double).unwrap();
door.force_install("/tmp/double.door").unwrap();
调用该服务器过程的客户端程序可能看起来像这样
use doors::Client;
let client = Client::open("/tmp/double.door").unwrap();
let response = client.call_with_data(&[111]).unwrap();
assert_eq!(response.data()[0], 222);
致谢
- 社交媒体预览图归 Jim Choate 所有,根据 CC BY-NC 2.0 许可。
- 此工作在 oxidecomputer/rusty-doors 的基础上进行,但后来重新燃起。
依赖关系
~1.5MB
~37K SLoC