#grpc #rpc #rpc-framework #protobuf #http2 #tls #load-balancing

grpcio

基于gRPC C核心库的Rust语言实现

45个版本

0.13.0 2023年8月25日
0.12.1 2023年2月14日
0.12.0 2022年11月4日
0.10.3 2022年6月28日
0.1.0 2017年7月27日

488网络编程

Download history 1875/week @ 2024-04-28 3164/week @ 2024-05-05 2358/week @ 2024-05-12 2263/week @ 2024-05-19 2295/week @ 2024-05-26 3340/week @ 2024-06-02 2209/week @ 2024-06-09 2113/week @ 2024-06-16 2281/week @ 2024-06-23 2069/week @ 2024-06-30 1954/week @ 2024-07-07 2642/week @ 2024-07-14 2406/week @ 2024-07-21 2252/week @ 2024-07-28 1946/week @ 2024-08-04 1795/week @ 2024-08-11

8,646 每月下载量
用于 62 个crate(45个直接)

Apache-2.0

27MB
535K SLoC

C++ 323K SLoC // 0.1% comments C 81K SLoC // 0.1% comments Python 41K SLoC // 0.2% comments Bazel 30K SLoC // 0.1% comments Go 19K SLoC // 0.1% comments M4 10K SLoC // 0.2% comments Rust 10K SLoC // 0.0% comments Shell 7.5K SLoC // 0.5% comments Bitbake 4.5K SLoC // 0.1% comments Forge Config 2.5K SLoC // 0.6% comments Swift 2K SLoC Lua 1.5K SLoC // 0.1% comments Batch 860 SLoC // 0.0% comments Ruby 559 SLoC // 0.2% comments PHP 334 SLoC // 0.8% comments XSL 185 SLoC C# 180 SLoC // 0.3% comments Perl 154 SLoC // 0.1% comments Automake 127 SLoC // 0.2% comments Java 119 SLoC // 0.4% comments Cython 94 SLoC // 0.1% comments PowerShell 92 SLoC // 0.2% comments Pan 43 SLoC // 0.1% comments Alex 19 SLoC AWK 17 SLoC // 0.3% comments NuGet Config 6 SLoC

gRPC-rs

gRPC-rsgRPC Core 的Rust封装。 gRPC 是一个高性能、开源的通用RPC框架,优先考虑移动设备和HTTP/2。

Crates.io docs.rs Build Status Build Status

状态

该项目仍在开发中。以下带有勾选标记的功能已支持

  • 基本异步单/流调用
  • 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 - 手动生成

  1. 安装protobuf编译器
$ cargo install protobuf-codegen
  1. 安装gRPC编译器
$ cargo install grpcio-compiler
  1. 生成源代码
$ protoc --rust_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_rust_plugin` example.proto

选项2 - 程序生成

可以通过使用protoc-grpcio,通过你的build.rs文件以编程方式从proto文件生成Rust模块。

有关更多信息及示例,请参阅README

要将此项目作为依赖项包含

[dependencies]
grpcio = "0.13"

功能 boringssl

boringssl功能启用了对TLS加密和某些认证机制的支持。在不需要时,例如在内部网络中工作,您可以通过以下配置禁用它:

[dependencies]
grpcio = { version = "0.13", default-features = false, features = ["protobuf-codec"] }

功能 prost-codecprotobuf-codec

gRPC-rs默认使用protobuf crate。如果您想使用prost,可以启用prost-codec功能。您可能只想启用这两个功能中的一个。虽然grpcio同时启用这两个功能是可以的,但grpcio-compiler将无法按预期工作。

功能 opensslopenssl-vendored

gRPC-rs自带gRPC Core,默认使用BoringSSL而不是OpenSSL。这可能会由于符号冲突和/或缺失符号而导致链接问题,特别是当另一个依赖项使用OpenSSL时。为了解决这个问题,您可以在Cargo.toml中为gprcio指定"openssl",这要求openssl (>=1.0.2)。例如:

[dependencies]
grpcio = { version = "0.13", features = ["openssl"] }

openssl-vendored与功能openssl相同,但将从捆绑的源代码构建OpenSSL。

性能

请参阅benchmark以了解如何自行运行基准测试。

交叉编译

请参阅cross_compile

贡献

在发送PR之前,请确保格式化和测试代码。

如果grpc-sys/grpc的内容已更新,您可能需要重新生成绑定

$ cargo xtask bindgen

依赖项

~2–11MB
~124K SLoC