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 网络编程

Download history 7/week @ 2024-03-09 2/week @ 2024-03-16 58/week @ 2024-03-30 17/week @ 2024-04-06

每月 68 次下载
用于 door-macros

MPL-2.0 许可证

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);

致谢

依赖关系

~1.5MB
~37K SLoC