#rpc #rpc-server #async-std #async #server-framework #http-server #rpc-client

toy-rpc-ha421

一个异步 RPC,模仿 golang net/rpc 的使用,并支持 async-std 和 tokio

1 个不稳定版本

0.9.0-beta.12024 年 3 月 22 日

#2073 in 异步


用于 rxqlite

MIT/Apache

300KB
6K SLoC

toy-rpc

一个异步 RPC crate,模仿 go 语言 net/rpc 包的使用,并支持 async-std 和 tokio。

该项目仍在积极开发中。我的功能想法有点用完了,所以如果你有想要的功能,欢迎告诉我。

toy-rpc 希望成为一个易于使用的异步 RPC 工具,受到 golang net/rpc API 的启发。它支持 TCP 或 TLS 上的 async_stdtokio 运行时。提供了与常见 HTTP 服务器框架(如 actix_webwarptide)的集成。

整体使用和 API 应该与 golang 的 net/rpc 包相似。一些名称已更改,使其听起来更“Rust”。因为 Rust 不包含运行时反射,所以使用属性宏 #[export_impl]#[export_trait] / #[export_trait_impl],以及属性 #[export_method] 来标记在 golang net/rpc 视角中“导出”的函数。

toy-rpc 的其他一些功能

  • 级联取消:每当一个未完成的 Call<Res> 被丢弃时,将会向服务器发送取消请求,从而传播取消。

更详细的用法可以在书籍和文档中找到。

一些早期文档和示例可以在这里找到

此包使用 #![forbid(unsafe_code)] 来确保包中不使用 unsafe

特性标志

特性标志可以分为三类。

运行时和 HTTP 框架集成的选择

  • async_std_runtime:支持与 async-std 一起使用
  • tokio_runtime:支持与 tokio 一起使用
  • http_tide:在服务器端启用 tide 集成。这还启用了 async_std_runtimews_async_std
  • http_actix_web:在服务器端启用 actix-web 集成。这还启用了 tokio_runtimews_tokio
  • http_warp:在服务器端启用与 warp 的集成。这还启用了 tokio_runtimews_tokio
  • http_axum:在服务器端启用与 axum 的集成。这还启用了 tokio_runtimews_tokio

选择 RPC 服务器或客户端(两者可以同时启用)

  • server:启用 RPC 服务器
  • client:启用 RPC 客户端

序列化/反序列化选择(一次只能启用一个)

  • serde_bincode:(默认)默认编解码器将使用 bincode 进行序列化和反序列化
  • serde_json:默认编解码器将使用 serde_json 进行 json 序列化和反序列化
  • serde_cbor:默认编解码器将使用 serde_cbor 进行序列化和反序列化
  • serde_rmp:默认编解码器将使用 rmp-serde 进行序列化和反序列化

WebSocket 支持(HTTP 集成通过 WebSocket 实现)

  • ws_tokio:启用与 tokio 的 WebSocket 和 HTTP 集成。客户端必须启用此选项才能使用 dial_http(addr)dial_websocket(addr)
  • ws_async_std:启用与 async-std 的 WebSocket 和 HTTP 集成。客户端必须启用此选项才能使用 dial_http(addr)dial_websocket(addr)

TLS 支持

  • tls:启用 TLS 支持

以下列出了一些其他简单的特性标志,它们可能对您没有实际用途。

  • 文档
  • stdserde/std。目前没有实际使用。

默认情况下,仅启用 serde_bincode 功能。您必须启用至少一个运行时功能标志以及 server 和/或 client 以获得可用的功能。

默认功能

default = ["serde_bincode"]

集成

actix-webtidewarp 提供了 HTTP 集成。更多详细信息请参阅书籍/集成示例

快速入门示例

书籍/快速入门中提供了一个使用 tokio 运行时的快速入门示例。

许可证:MIT/Apache-2.0

依赖项

~3–22MB
~351K SLoC