18 个版本 (11 个重大更新)
0.13.0 | 2023 年 8 月 25 日 |
---|---|
0.12.1 | 2023 年 2 月 14 日 |
0.12.0 | 2022 年 11 月 4 日 |
0.10.0 | 2022 年 3 月 2 日 |
0.2.0 | 2017 年 12 月 19 日 |
#26 in #rpc-framework
49 每月下载量
用于 2 crates
1.5MB
30K SLoC
gRPC-rs
gRPC-rs
是 gRPC Core 的 Rust 封装。 gRPC 是一个高性能、开源的通用 RPC 框架,以移动设备和 HTTP/2 为先。
状态
该项目仍在开发中。以下带有勾选标记的功能是支持的
- 基本异步单例/流式调用
- SSL
- 泛型调用
- 连接级别压缩
- 互操作性测试
- QPS 基准测试
- 自定义元数据
- 健康检查
- 反射
- 身份验证
- 负载均衡,客户端完全支持,服务器端负载报告尚未实现。
先决条件
- CMake >= 3.8.0
- Rust >= 1.36.0
- binutils >= 2.22
- 如果需要编译时生成绑定,LLVM 和 Clang >= 3.9。
对于 Linux 和 MacOS,您还需要安装 gcc 7.3+(或 clang 6+)。
已为 x86_64/arm64 Linux 预生成绑定。对于其他平台,绑定将在编译时生成。
对于 Windows,您还需要安装以下软件
- Active State Perl
- yasm
- Visual Studio 2015+
构建
$ cargo xtask submodule # if you just cloned the repository
$ cargo build
链接 OpenSSL 错误
如果您在构建项目时使用 gRPC-rs
时遇到链接器错误,请转到 openssl
功能部分以获取可能的解决方案。
用法
从 proto 文件生成源代码
选项 1 - 手动生成
- 安装 protobuf 编译器
$ cargo install protobuf-codegen
- 安装 gRPC 编译器
$ cargo install grpcio-compiler
- 生成源代码
$ protoc --rust_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_rust_plugin` example.proto
选项 2 - 编程生成
可以使用程序化生成来通过您的 build.rs
从 proto 文件生成 Rust 模块,使用 protoc-grpcio。
有关更多信息和方法示例,请参阅 README。
要将此项目作为依赖项包含
[dependencies]
grpcio = "0.13"
特性 boringssl
boringssl
特性启用对 TLS 加密和某些身份验证机制的兼容。如果您不需要它,例如在 intranet 上工作,可以通过以下配置禁用它:
[dependencies]
grpcio = { version = "0.13", default-features = false, features = ["protobuf-codec"] }
特性 prost-codec
和 protobuf-codec
gRPC-rs
默认使用 protobuf
crate。如果您想使用 prost
,则可以启用 prost-codec
特性。您可能只想启用这两个特性中的一个。尽管 grpcio 在同时启用两个特性时表现良好,但 grpcio-compiler 可能不会按预期工作。
特性 openssl
和 openssl-vendored
gRPC-rs
随 gRPC Core
一起提供,默认使用 BoringSSL 而不是 OpenSSL。这可能会由于符号冲突和/或缺少符号而导致链接问题。为了解决这个问题,您可以通过在 Cargo.toml
的 gprcio
功能列表中指定 "openssl"
来告诉 gRPC-rs
也使用 OpenSSL。这需要 openssl (>=1.0.2)。例如:
[dependencies]
grpcio = { version = "0.13", features = ["openssl"] }
特性 openssl-vendored
与特性 openssl
相同,但它将从捆绑的源构建 openssl。
性能
请参阅 基准测试 以了解如何自行运行基准测试。
交叉编译
请参阅 交叉编译
贡献
在发送 PR 之前,请确保格式化和测试代码。
如果 grpc-sys/grpc 中的内容已更新,您可能需要重新生成绑定。
$ cargo xtask bindgen
依赖关系
~28–38MB
~687K SLoC