#rpc #web #macro #arpy

arpy-macros

Arpy RPC 库的宏

2 个不稳定版本

0.2.0 2023年7月31日
0.1.0 2023年2月1日

#492 in #rpc

Download history 32/week @ 2024-03-11 34/week @ 2024-03-18 40/week @ 2024-03-25 53/week @ 2024-04-01 21/week @ 2024-04-08 23/week @ 2024-04-15 26/week @ 2024-04-22 95/week @ 2024-04-29 24/week @ 2024-05-06 24/week @ 2024-05-13 32/week @ 2024-05-20 16/week @ 2024-05-27 31/week @ 2024-06-03 27/week @ 2024-06-10 16/week @ 2024-06-17 27/week @ 2024-06-24

每月下载量102次
7 个 crate 中使用(通过 arpy

MIT/Apache

5KB

Arpy:Rust 的 RPC

tests crates.io Documentation MIT/Apache-2 licensed

定义您的 RPC 签名,并使用各种客户端/服务器实现来使用它们。

项目状态

Arpy 处于初级阶段,尚未经过充分测试。

传输实现

ReqwestReqwasm 客户端可用,以及 AxumActix 服务器。

用法

定义您的 RPC 签名,在服务器上实现它们,并在客户端调用它们。这些可以位于不同的 crate 中,也可以根据您的流程全部在一个 crate 中。

定义 RPC 签名

#[derive(MsgId, Serialize, Deserialize, Debug)]
pub struct Add(pub i32, pub i32);

impl FnRemote for Add {
    type Output = i32;
}

#[derive(MsgId, Serialize, Deserialize, Debug)]
pub struct TryMultiply(pub i32, pub i32);

impl FnRemote for TryMultiply {
    type Output = Result<i32, ()>;
}

实现服务器

使用 Axum 的示例

async fn add(args: &Add) -> i32 {
    args.0 + args.1
}

async fn try_multiply(args: &TryMultiply) -> Result<i32, ()> {
    Ok(args.0 * args.1)
}

let app = Router::new()
    .http_rpc_route("/http", add)
    .http_rpc_route("/http", try_multiply);

Server::bind(&SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 9090))
    .serve(app.into_make_service())
    .await
    .unwrap();

调用远程过程

使用 Reqwasm 的示例

let connection = http::Connection::new(&format!("http://127.0.0.1:9090/api"));
let result = Add(1, 2).call(&connection).await?;

assert_eq!(3, result);

其他功能

  • Websocket 支持,包括
    • 多个并发 RPC 调用
    • 参数化订阅
  • 服务器发送事件

依赖项

~1.5MB
~35K SLoC