gRPC pour Rust : bibliothèques et exemples
gRPC est un framework haute performance pour l'appel de procédure à distance (RPC), développé par Google. Il utilise Protocol Buffers (protobuf) pour la sérialisation des données et HTTP/2 pour le transport. Dans l'écosystème Rust, les principales bibliothèques pour travailler avec gRPC sont tonic et grpc-rs. Dans cet article, nous examinerons en détail les deux bibliothèques, leurs fonctionnalités et fournirons des exemples pratiques de code.
Pourquoi gRPC en Rust ?
Rust est un langage de programmation système axé sur la sécurité mémoire et les performances. gRPC en Rust permet de créer :
- Des microservices à forte charge
- Des services de streaming en temps réel
- Des applications client-serveur multiplateformes
- Une intégration avec l'infrastructure gRPC existante
Bibliothèques principales
1. Tonic — un choix moderne et recommandé
Tonic est une bibliothèque gRPC asynchrone construite sur tokio et hyper. Elle est activement maintenue par la communauté et est considérée comme la norme pour gRPC en Rust.
Avantages de tonic :
- Prise en charge complète de gRPC (flux unaires, serveur, client et bidirectionnels)
- Génération de code via
tonic-buildà partir de fichiers.proto - Intégration avec
tokio(runtime asynchrone) - Prise en charge de TLS, de l'équilibrage de charge et des intercepteurs
- Communauté active et bonne documentation
2. grpc-rs — une alternative de PingCAP
grpc-rs est un wrapper Rust autour de la bibliothèque C gRPC Core. Utilisé dans le projet TiKV. Convient aux cas où une compatibilité maximale avec la pile C gRPC d'origine est requise.
Caractéristiques de grpc-rs :
- Wrapper autour de gRPC Core (bibliothèque C)
- Prise en charge de tous les types d'appels gRPC
- Moins de « magie » — plus de contrôle
- Nécessite l'installation de
protocetcmake - Moins populaire que tonic
Recommandation : Pour la plupart des nouveaux projets, choisissez tonic. grpc-rs doit être utilisé si vous avez besoin d'une intégration avec du code C gRPC existant.
Configuration d'un projet avec tonic
Créez un nouveau projet :
cargo new grpc-examplecd grpc-exampleAjoutez les dépendances dans Cargo.toml :
[dependencies]tonic = "0.11"prost = "0.12"tokio = { version = "1", features = ["full"] }
[build-dependencies]tonic-build = "0.11"Créez le fichier proto/hello.proto :
syntax = "proto3";
package hello;
service Greeter { rpc SayHello (HelloRequest) returns (HelloReply);}
message HelloRequest { string name = 1;}
message HelloReply { string message = 1;}Configurez la compilation — créez build.rs :
fn main() -> Result<(), Box<dyn std::error::Error>> { tonic_build::compile_protos("proto/hello.proto")?; Ok(())}Exemple de serveur avec tonic
Créez src/server.rs :
use tonic::{transport::Server, Request, Response, Status};use hello::greeter_server::{Greeter, GreeterServer};use hello::{HelloRequest, HelloReply};
pub mod hello { tonic::include_proto!("hello");}
#[derive(Default)]pub struct MyGreeter;
#[tonic::async_trait]impl Greeter for MyGreeter { async fn say_hello( &self, request: Request<HelloRequest>, ) -> Result<Response<HelloReply>, Status> { let name = request.into_inner().name; let reply = HelloReply { Aussi dans la bibliothèque
Autorisation et authentification en C# (.NET) : guide complet
Planificateur de tâches en Go (Golang) : cron, gocron et robfig/cron
Micrometer Java : guide complet avec exemples
Travailler avec YAML en TypeScript : parsing, génération et validation de données