52 个版本
0.10.0 | 2024 年 4 月 19 日 |
---|---|
0.9.0-beta.1 | 2022 年 8 月 18 日 |
0.9.0-alpha.2 | 2021 年 11 月 24 日 |
0.8.6 | 2022 年 7 月 19 日 |
0.3.1 | 2020 年 11 月 27 日 |
#1172 在 网络编程
1,161 每月下载量
305KB
6.5K SLoC
toy-rpc
一个异步 RPC 库,模仿 golang 的 net/rpc
包,并支持 async-std 和 tokio。
此项目仍在积极开发中。我的功能想法已经有点用尽了,所以如果您想要某个功能,请随时告诉我。
toy-rpc
旨在成为一个易于使用的异步 RPC 工具,灵感来源于 golang 的 net/rpc
API。它支持 TCP 或 TLS 上的 async_std
和 tokio
运行时。提供了与常见 HTTP 服务器框架(如 actix_web
、warp
和 tide
)的集成。
总体使用和 API 应该与 golang 的 net/rpc
包类似。一些名称已更改,使其听起来更“rusty”。因为 Rust 不自带运行时反射,所以使用属性宏 #[export_impl]
和 #[export_trait]
/ #[export_trait_impl]
,以及属性 #[export_method]
来标记函数在 golang 的 net/rpc
视角下为“导出”。
toy-rpc
的一些其他功能
- 级联取消:每当一个未完成的
Call<Res>
被丢弃时,会向服务器发送取消请求,从而传播取消。
更详细的用法可以在书籍和文档中找到。
此crate使用#![forbid(unsafe_code)]
来确保crate中没有使用unsafe
。
功能标志
功能标志可以分为三类。
运行时和HTTP框架集成的选择
async_std_runtime
:支持与async-std
一起使用tokio_runtime
:支持与tokio
一起使用http_tide
:在服务器端启用tide
集成。这还启用了async_std_runtime
和ws_async_std
http_actix_web
:在服务器端启用actix-web
集成。这还启用了tokio_runtime
和ws_tokio
http_warp
:在服务器端启用与warp
的集成。这还启用了tokio_runtime
和ws_tokio
http_axum
:在服务器端启用与axum
的集成。这还启用了tokio_runtime
和ws_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
或dial_websocket
时必须启用。ws_async_std
:启用与async-std
的WebSocket和HTTP集成。客户端使用dial_http
或dial_websocket
时必须启用。
TLS支持
tls
:启用TLS支持
以下列出了一些其他功能标志,它们可能对您没有实际用途。
文档
std
:serde/std
。目前没有实际用途。
默认情况下,只启用了 serde_bincode
功能。您必须至少启用一个运行时功能标志,以及 server
和/或 client
才能使用。
默认功能
default = ["serde_bincode"]
集成
为 actix-web
、tide
和 warp
提供了 HTTP 集成。更多详细信息请参阅书籍/集成和示例。
快速入门示例
在书籍/快速入门中提供了一个使用 tokio
运行时的快速入门示例。
许可证:MIT/Apache-2.0
依赖关系
~3–21MB
~306K SLoC