5个版本

0.1.4 2024年5月29日
0.1.3 2024年3月1日
0.1.2 2024年3月1日
0.1.1 2024年3月1日
0.1.0 2024年2月28日

#procedure中排名第11

每月下载量26
用于may_rpc

MIT协议

21KB
419

may_rpc

基于Rust协程的RPC框架

Build Status Current Crates.io Version Document

may_rpc是一个基于协程的Rust RPC框架,由may驱动,注重易用性。灵感来自tarpc

使用方法

将依赖项添加到您的 Cargo.toml

may_rpc = "0.1"

示例

#[may_rpc::service]
trait Hello {
    fn hello(&self, name: String) -> String;
}

#[derive(may_rpc::Server)]
#[service(Hello)]
struct HelloServer;

impl Hello for HelloServer {
    fn hello(&self, name: String) -> String {
        format!("Hello, {}!", name)
    }
}

fn main() {
    use may_rpc::TcpServer;
    let addr = "127.0.0.1:10000";
    let server = HelloServer.start(addr).unwrap();

    let stream = may::net::TcpStream::connect(addr).unwrap();
    let client = HelloClient::new(stream).unwrap();
    println!("{}", client.hello("Mom".to_string()).unwrap());

    server.shutdown();
}

service 属性宏扩展为形成 RPC 服务的项目集合。在上面的示例中,service 宏为 Hello RPC 特性生成。这将生成 HelloClient 以方便使用。然后 HelloServer 类型派生 Server 并为 RPC 服务器实现 Hello 特性。生成的类型使编写服务器变得简单而优雅,无需直接处理套接字或序列化。只需实现生成的特性,您就可以开始了!

请参阅示例目录以获取更多示例。

错误

所有生成的 may_rpc RPC 方法都返回 Result<T, may_rpc::Error>。错误原因可能是 I/O 错误或超时。

默认超时时间为 10 秒,您可以通过 RpcClient 实例进行配置。

性能

只需在此项目下运行吞吐量示例

机器规格

  • 逻辑核心: 4 (4 核 x 2 线程)
  • 内存: 4gb ECC DDR3 @ 1600mhz
  • 处理器: CPU Intel(R) Core(TM) i7-3820QM CPU @ 2.70GHz
  • 操作系统: Windows 10

测试配置

may::config().set_workers(6).set_io_workers(4);

结果

$ cargo run --example=throughput --release
......
     Running `target\release\examples\throughput.exe`
206127.39 rpc/second

其他特性

  • 单个客户端的并发请求。客户端可以被克隆以重复使用连接
  • 运行任意数量的客户端和服务
  • 任何实现了 implserdeSerializeDeserialize 的类型都可以用于 rpc 签名。
  • 可以在 rpc 方法上指定属性。这些属性将包含在服务的 trait 方法以及客户端的存根方法中。

许可证

该项目可以选择以下任意一种许可证

依赖项

~290–740KB
~17K SLoC