gRPC para C++: bibliotecas, ejemplos y guía 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 C++: bibliotecas, ejemplos y guía práctica

gRPC es un entorno moderno y de alto rendimiento para llamadas a procedimientos remotos (RPC), desarrollado por Google. Permite que aplicaciones cliente y servidor en diferentes lenguajes (incluyendo C++, Python, Go, Java) se comuniquen entre sí tan fácilmente como si fueran llamadas a funciones locales. Para C++, gRPC proporciona una interfaz potente y fuertemente tipada basada en Protocol Buffers (protobuf), lo que lo convierte en la elección ideal para crear microservicios y sistemas distribuidos.

En este artículo, analizaremos las bibliotecas clave, el proceso de instalación y escribiremos un ejemplo completo de un servidor y cliente gRPC en C++.



Bibliotecas clave para gRPC en C++

Para trabajar con gRPC en C++, necesitará los siguientes componentes:

  • grpc (libgrpc++) — la biblioteca principal de gRPC. Contiene la implementación de la capa de transporte (HTTP/2), canales, servidores y pilas asíncronas.
  • protobuf (libprotobuf) — biblioteca para la serialización de datos estructurados. Define el formato de los mensajes (archivos .proto) y genera código C++.
  • grpc++ (libgrpc++_unsecure o libgrpc++_reflection) — envoltorio de alto nivel de C++ para gRPC. Proporciona una API síncrona y asíncrona para los servicios.
  • grpc_cpp_plugin — complemento para el compilador de protobuf (protoc), que genera código C++ para servidores y clientes gRPC.
  • abseil-cpp — biblioteca de Google utilizada por gRPC para cadenas, hilos y sincronización (a menudo se incluye automáticamente).


Instalación y configuración

La forma recomendada de instalación es compilar desde el código fuente o usar el gestor de paquetes vcpkg/conan. Mostraremos la instalación a través de vcpkg:

# Instalación de vcpkg (si aún no está instalado)git clone https://github.com/Microsoft/vcpkg.gitcd vcpkg./bootstrap-vcpkg.sh

# Instalación de gRPC con soporte para C++./vcpkg install grpc[ssl]

Después de la instalación, enlace las bibliotecas en CMakeLists.txt:

cmake_minimum_required(VERSION 3.15)project(GrpcExample CXX)

set(CMAKE_CXX_STANDARD 17)find_package(gRPC CONFIG REQUIRED)find_package(Protobuf CONFIG REQUIRED)

# Generación de archivos protoset(PROTO_FILE proto/hello.proto)set(GENERATED_PROTO_SRC ${CMAKE_CURRENT_BINARY_DIR}/hello.pb.cc)set(GENERATED_PROTO_HDR ${CMAKE_CURRENT_BINARY_DIR}/hello.pb.h)set(GENERATED_GRPC_SRC ${CMAKE_CURRENT_BINARY_DIR}/hello.grpc.pb.cc)set(GENERATED_GRPC_HDR ${CMAKE_CURRENT_BINARY_DIR}/hello.grpc.pb.h)

add_custom_command( OUTPUT ${GENERATED_PROTO_SRC} ${GENERATED_PROTO_HDR} ${GENERATED_GRPC_SRC} ${GENERATED_GRPC_HDR} COMMAND protobuf::protoc ARGS --grpc_out ${CMAKE_CURRENT_BINARY_DIR} --cpp_out ${CMAKE_CURRENT_BINARY_DIR} --plugin=protoc-gen-grpc=$<TARGET_FILE:gRPC::grpc_cpp_plugin> -I ${CMAKE_CURRENT_SOURCE_DIR}/proto ${CMAKE_CURRENT_SOURCE_DIR}/${PROTO_FILE} DEPENDS ${PROTO_FILE} COMMENT "Generating gRPC code from proto files")add_library(generated_proto ${GENERATED_PROTO_SRC} ${GENERATED_GRPC_SRC})target_include_directories(generated_proto PUBLIC ${CMAKE_CURRENT_BINARY_DIR})target_link_libraries(generated_proto gRPC::grpc++ protobuf::libprotobuf)


Creación del archivo .proto

Primero, definamos el servicio y los mensajes en el archivo hello.proto:

syntax = "proto3";

package hello;

// Solicitud: enviamos un nombremessage HelloRequest { string name = 1;}

// Respuesta: recibimos un saludomessage HelloReply { string message = 1;}

// Definimos el servicio gRPCservice Greeter { // Unary RPC (una solicitud — una respuesta) rpc SayHello (HelloRequest) returns (HelloReply);}


Implementación del servidor en C++

Creemos el archivo se

Recommendations