gRPC para Rust: bibliotecas y ejemplos de uso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

gRPC para Rust: bibliotecas y ejemplos



gRPC es un framework de alto rendimiento para llamadas a procedimientos remotos (RPC), desarrollado por Google. Utiliza Protocol Buffers (protobuf) para la serialización de datos y HTTP/2 para el transporte. En el ecosistema de Rust, las principales bibliotecas para trabajar con gRPC son tonic y grpc-rs. En este artículo, analizaremos en detalle ambas bibliotecas, sus capacidades y proporcionaremos ejemplos prácticos de código.



¿Por qué gRPC en Rust?

Rust es un lenguaje de programación de sistemas con énfasis en la seguridad de la memoria y el rendimiento. gRPC en Rust permite crear:

  • Microservicios de alta carga
  • Servicios de streaming en tiempo real
  • Aplicaciones cliente-servidor multiplataforma
  • Integración con infraestructura gRPC existente


Bibliotecas principales



1. Tonic — la opción moderna y recomendada

Tonic es una biblioteca asíncrona de gRPC construida sobre tokio y hyper. Es mantenida activamente por la comunidad y se considera el estándar para gRPC en Rust.

Ventajas de tonic:

  • Soporte completo de gRPC (flujos unarios, de servidor, de cliente y bidireccionales)
  • Generación de código a través de tonic-build basado en archivos .proto
  • Integración con tokio (runtime asíncrono)
  • Soporte para TLS, balanceo de carga e interceptores
  • Comunidad activa y buena documentación


2. grpc-rs — alternativa de PingCAP

grpc-rs es un envoltorio de Rust sobre la biblioteca C gRPC Core. Se utiliza en el proyecto TiKV. Es adecuado para casos donde se requiere la máxima compatibilidad con la pila C original de gRPC.

Características de grpc-rs:

  • Envoltorio sobre gRPC Core (biblioteca C)
  • Soporte para todos los tipos de llamadas gRPC
  • Menos "magia" — más control
  • Requiere instalación de protoc y cmake
  • Menos popular en comparación con tonic

Recomendación: Para la mayoría de los proyectos nuevos, elija tonic. grpc-rs debe usarse si necesita integración con código C existente de gRPC.



Configuración del proyecto con tonic

Cree un nuevo proyecto:

cargo new grpc-examplecd grpc-example


Agregue las dependencias en Cargo.toml:

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

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


Cree el archivo proto/hello.proto:

syntax = "proto3";

package hello;

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

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


Configure la compilación — cree build.rs:

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


Ejemplo de servidor con tonic

Cree 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