3个版本
0.0.3 | 2024年8月4日 |
---|---|
0.0.2 | 2024年7月28日 |
0.0.1 | 2024年7月28日 |
#989 in 网络编程
每月363次下载
42KB
835 代码行
mrpc
使用Rust实现的MessagePack-RPC。
功能
- 编写异步RPC服务器和客户端
- 支持TCP和Unix域套接字
- 完整的msgpack-rpc实现(请求、响应、通知)
- 支持双向通信 - 服务器和客户端都可以处理传入的RPC消息
- 基于
tokio
进行异步I/O - 使用
rmpv
进行MessagePack序列化
快速入门
use mrpc::{Client, Connection, Result, RpcSender, Server};
use rmpv::Value;
#[derive(Clone, Default)]
struct Echo;
#[async_trait::async_trait]
impl Connection for Echo {
async fn handle_request(
&self,
_: RpcSender,
method: &str,
params: Vec<Value>,
) -> Result<Value> {
Ok(format!("{} -> {}", method, params[0]).into())
}
}
#[tokio::main]
async fn main() -> Result<()> {
// We're just using the default constructor as our ConnectionMaker
let server = Server::from_fn(Echo::default).tcp("127.0.0.1:0").await?;
let addr = server.local_addr().unwrap();
tokio::spawn(server.run());
// `Connection` is implemented for (), as a convenience for clients who don't need to handle
// requests or responses.
let client = Client::connect_tcp(&addr.to_string(), ()).await?;
let result = client
.send_request("echo", &[Value::String("Hello there!".into())])
.await?;
println!("{}", result);
Ok(())
}
依赖项
~4–11MB
~98K SLoC