gRPC pour Rust : bibliothèques et exemples d'utilisation

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 protoc et cmake
  • 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-example


Ajoutez 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 {

Recommendations