gRPC für Rust: Bibliotheken und Anwendungsbeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

gRPC für Rust: Bibliotheken und Beispiele



gRPC ist ein von Google entwickeltes Hochleistungs-Framework für entfernte Prozeduraufrufe (RPC). Es verwendet Protocol Buffers (protobuf) zur Datenserialisierung und HTTP/2 als Transportprotokoll. Im Rust-Ökosystem sind die wichtigsten Bibliotheken für die Arbeit mit gRPC tonic und grpc-rs. In diesem Artikel werden wir beide Bibliotheken im Detail betrachten, ihre Funktionen vorstellen und praktische Codebeispiele liefern.



Warum gRPC in Rust?

Rust ist eine systemnahe Programmiersprache mit Fokus auf Speichersicherheit und Leistung. gRPC in Rust ermöglicht die Erstellung von:

  • Hochlast-Mikroservices
  • Echtzeit-Streaming-Diensten
  • Plattformübergreifenden Client-Server-Anwendungen
  • Integration in bestehende gRPC-Infrastrukturen


Wichtige Bibliotheken



1. Tonic – moderne und empfohlene Wahl

Tonic ist eine asynchrone gRPC-Bibliothek, die auf tokio und hyper aufbaut. Sie wird aktiv von der Community unterstützt und gilt als Standard für gRPC in Rust.

Vorteile von tonic:

  • Vollständige gRPC-Unterstützung (unäre, Server-, Client- und bidirektionale Streams)
  • Codegenerierung über tonic-build basierend auf .proto-Dateien
  • Integration mit tokio (asynchrone Laufzeitumgebung)
  • Unterstützung von TLS, Lastausgleich und Interceptoren
  • Aktive Community und gute Dokumentation


2. grpc-rs – Alternative von PingCAP

grpc-rs ist ein Rust-Wrapper um die C-Bibliothek gRPC Core. Es wird im TiKV-Projekt verwendet. Geeignet für Fälle, in denen maximale Kompatibilität mit dem ursprünglichen gRPC C-Stack erforderlich ist.

Eigenschaften von grpc-rs:

  • Wrapper um gRPC Core (C-Bibliothek)
  • Unterstützung aller gRPC-Aufruftypen
  • Weniger „Magie“ – mehr Kontrolle
  • Erfordert Installation von protoc und cmake
  • Weniger beliebt im Vergleich zu tonic

Empfehlung: Für die meisten neuen Projekte wählen Sie tonic. grpc-rs sollte verwendet werden, wenn eine Integration mit vorhandenem gRPC-C-Code erforderlich ist.



Projekteinrichtung mit tonic

Erstellen Sie ein neues Projekt:

cargo new grpc-examplecd grpc-example


Fügen Sie Abhängigkeiten in Cargo.toml hinzu:

[dependencies]tonic = "0.11"prost = "0.12"tokio = { version = "1", features = ["full"] }

[build-dependencies]tonic-build = "0.11"


Erstellen Sie die Datei proto/hello.proto:

syntax = "proto3";

package hello;

service Greeter { rpc SayHello (HelloRequest) returns (HelloReply);}

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


Konfigurieren Sie den Build – erstellen Sie build.rs:

fn main() -> Result<(), Box<dyn std::error::Error>> {    tonic_build::compile_protos("proto/hello.proto")?;    Ok(())}


Beispielserver mit tonic

Erstellen Sie 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 {

Empfehlungen