gRPC para C++: bibliotecas, configuración y ejemplos de código

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

Introducción a gRPC para C++



gRPC es un framework moderno para llamadas a procedimientos remotos (RPC), desarrollado por Google. Utiliza Protocol Buffers (protobuf) para la serialización de datos y HTTP/2 como protocolo de transporte. Para el lenguaje C++, gRPC proporciona bibliotecas nativas que permiten crear microservicios de alto rendimiento y sistemas distribuidos.



En este artículo, analizaremos las bibliotecas principales, la configuración del entorno y escribiremos un ejemplo completo de una aplicación cliente-servidor en C++.



Bibliotecas principales de gRPC para C++



Para trabajar con gRPC en C++, es necesario instalar varios componentes:



  • grpc — la biblioteca principal, que contiene las implementaciones del servidor y del cliente.
  • grpc++ — envoltorio de C++ sobre gRPC, que proporciona una API conveniente.
  • protobuf — biblioteca para trabajar con Protocol Buffers (generación de clases, serialización/deserialización).
  • grpc_cpp_plugin — plugin para el compilador protoc, que genera código C++ a partir de archivos .proto.


También pueden ser necesarias dependencias: abseil-cpp, openssl, zlib y c-ares.



Instalación de gRPC y protobuf



La forma recomendada es compilar desde el código fuente usando CMake. Ejemplo para Linux/macOS:



git clone --recurse-submodules -b v1.60.0 https://github.com/grpc/grpccd grpcmkdir build && cd buildcmake .. -DgRPC_INSTALL=ON -DCMAKE_INSTALL_PREFIX=/usr/localmake -j$(nproc)sudo make install


Después de la instalación, verifique la disponibilidad del compilador protobuf y del plugin:



protoc --versionwhich grpc_cpp_plugin


Definición del servicio a través del archivo .proto



Creemos un archivo example.proto:



syntax = "proto3";

package example;

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

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


Generemos el código C++:



protoc --cpp_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` example.proto


Como resultado, aparecerán los archivos: example.pb.h, example.pb.cc, example.grpc.pb.h, example.grpc.pb.cc.



Implementación del servidor en C++



Cree un archivo server.cc:



#include <iostream>#include <memory>#include <string>

#include <grpcpp/grpcpp.h>#include "example.grpc.pb.h"

using grpc::Server;using grpc::ServerBuilder;using grpc::ServerContext;using grpc::Status;using example::Greeter;using example::HelloRequest;using example::HelloReply;

class GreeterServiceImpl final : public Greeter::Service { Status SayHello(ServerContext* context, const HelloRequest* request, HelloReply* reply) override { std::string prefix("Hello, "); reply->set_message(prefix + request->name()); return Status::OK; }};

void RunServer() { std::string server_address("0.0.0.0:50051"); GreeterServiceImpl service;

ServerBuilder builder; builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); builder.RegisterService(&service);

std::unique_ptr<Server> server(builder.BuildAndStart()); std::cout << "Server listening on " << server_address << std::endl; server->Wait();}

int main() { RunServer(); return 0;}


Implementación del cliente en C++



Cree un archivo client.cc:



#include <iostream>#include <memory>#include <string>

#include <grpcpp/grpcpp.h>#include "example.grpc.pb.h"

using grpc::Channel;using grpc::ClientContext;using grpc::Status;using example::Gree

Recommendations