gRPC-Rust 开源项目教程
grpc-rustRust implementation of gRPC项目地址:https://gitcode.com/gh_mirrors/grp/grpc-rust
项目介绍
gRPC-Rust 是一个基于 Rust 语言实现的 gRPC 库,它允许开发者使用 Rust 编写高性能、可扩展的 RPC 服务。gRPC 是一个现代的开源高性能 RPC 框架,支持多种语言,广泛应用于微服务架构中。gRPC-Rust 项目充分利用了 Rust 语言的特性,如内存安全、并发处理能力强等,为 Rust 开发者提供了一个强大的工具来构建分布式系统。
项目快速启动
环境准备
在开始之前,请确保你已经安装了 Rust 编程环境。如果没有安装,可以通过以下命令进行安装:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
创建新项目
首先,创建一个新的 Rust 项目:
cargo new grpc-rust-demo
cd grpc-rust-demo
添加依赖
在 Cargo.toml
文件中添加 gRPC-Rust 的依赖:
[dependencies]
grpc = "0.8"
protobuf = "2.27"
tokio = { version = "1", features = ["full"] }
编写 gRPC 服务
-
定义 Protocol Buffers 文件
创建
proto
目录并在其中添加service.proto
文件:syntax = "proto3"; package hello; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply); } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
-
生成 Rust 代码
使用
protoc
工具生成 Rust 代码:protoc --rust_out=src --grpc_out=src --plugin=protoc-gen-grpc=`which grpc_rust_plugin` proto/service.proto
-
编写服务端代码
在
src
目录下创建main.rs
文件,并添加以下代码:mod service; use grpc::Server; use grpc::ServerBuilder; use hello::GreeterServer; use hello::Greeter; use hello::HelloRequest; use hello::HelloReply; struct GreeterService; impl Greeter for GreeterService { fn say_hello(&self, _: grpc::RequestOptions, req: HelloRequest) -> grpc::SingleResponse<HelloReply> { let mut resp = HelloReply::new(); resp.set_message(format!("Hello, {}!", req.get_name())); grpc::SingleResponse::completed(resp) } } #[tokio::main] async fn main() { let mut server = ServerBuilder::new_plain(); server.http.set_port(50051); server.add_service(GreeterServer::new_service_def(GreeterService)); let _server = server.build().expect("Could not start server"); loop { tokio::time::sleep(tokio::time::Duration::from_secs(86400)).await; } }
-
编写客户端代码
在
src
目录下创建client.rs
文件,并添加以下代码:mod service; use grpc::ClientConf; use grpc::ClientStub; use grpc::ClientStubExt; use hello::GreeterClient; use hello::HelloRequest; #[tokio::main] async fn main() { let client = GreeterClient::new_plain("localhost", 50051, ClientConf::new()).unwrap(); let mut req = HelloRequest::new(); req.set_name("World".to_string()); let resp = client.say_hello(grpc::RequestOptions::new(), req).await.unwrap(); println!("Response: {}", resp.get_message()); }
运行服务端和客户端
- **启动
grpc-rustRust implementation of gRPC项目地址:https://gitcode.com/gh_mirrors/grp/grpc-rust