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
21KB
419 行
may_rpc
基于Rust协程的RPC框架
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
其他特性
- 单个客户端的并发请求。客户端可以被克隆以重复使用连接
- 运行任意数量的客户端和服务
- 任何实现了
impl
的serde
的Serialize
和Deserialize
的类型都可以用于 rpc 签名。 - 可以在 rpc 方法上指定属性。这些属性将包含在服务的 trait 方法以及客户端的存根方法中。
许可证
该项目可以选择以下任意一种许可证
- Apache License, Version 2.0, (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT 或 http://opensource.org/licenses/MIT).
依赖项
~290–740KB
~17K SLoC