5 个版本
0.2.3 | 2023年12月29日 |
---|---|
0.2.2 | 2023年12月29日 |
0.2.0 | 2022年11月11日 |
0.1.19 | 2022年8月16日 |
0.1.13 |
|
#7 in #robust
每月48次下载
440KB
854 行
drpc
Drpc - 正确、高性能、健壮、易于使用的远程调用框架
drpc
- 超级高性能,性能(qps)比 Tarpc(Google)快一倍
- 基于 T-L-V。例如:
[Tag][Length][Value]
- 支持自定义序列化包。例如:bincode、json、bson...任何 serde 序列化
- 支持负载均衡。(轮询/随机/哈希/最小连接)
- 支持自定义注册表,微服务。见 redis_registry
- 支持 tokio,这是一个异步/等待包
- 零开销,接受/响应只序列化一次,反序列化一次
T-L-V 布局
// Frame layout
// id(u64) + ok(u8) + len(u64) + payload([u8; len])
// request frame layout. payload = method([u8;len])+'\n'(u8)+arg_data([u8;len])
// id(u64) + ok(u8) + len(u64) + payload([u8; len])
// response frame layout.ok=0? payload = error string,ok=1? payload = data
// id(u64) + ok(u8) + len(u64) + payload ([u8; len])
// Header Length layout
// head(8(id)+1(ok)+8(length)=17)
qps 基准测试- remote_method(i32)->i32
框架 | 平台(1-服务器-1-客户端) | ns/operation(越低越好) | Qps(越高越好) |
---|---|---|---|
drpc/tokio | AMD 5950x-16 CPU,32G 内存 | 49213 ns/op | 20317 QPS/s |
tarpc/tokio | AMD 5950x-16 CPU,32G 内存 | 105644 ns/op | 9465 QPS/s |
如何使用?
tokio = { version = "1", features = ["full"] }
drpc = "0.1"
- 客户端
use drpc::client::Client;
use drpc::codec::BinCodec;
let c = Client::<BinCodec>::dial("127.0.0.1:10000").await.unwrap();
let resp:i32 = c.call("handle", 1).await.unwrap();
println!("resp=>>>>>>>>>>>>>> :{}", resp);
- 服务器
use drpc::server::Server;
use drpc::Result;
use drpc::codec::BinCodec;
async fn handle(req: i32) -> Result<i32> {
Ok(req)
}
let mut s = Server::<BinCodec>::new();
s.register_fn("handle", handle);
s.register_fn("handle2", | arg:i32| async move{
Ok(arg + 1)
});
s.serve("0.0.0.0:10000").await;
依赖项
~5–13MB
~141K SLoC