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 installDespués de la instalación, verifique la disponibilidad del compilador protobuf y del plugin:
protoc --versionwhich grpc_cpp_pluginDefinició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.protoComo 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 También en la biblioteca
Generación de informes PDF en Go: revisión de bibliotecas y ejemplos de código
Criptografía en C# (.NET): cifrado y hash de datos
Event Bus y el patrón Observer en Kotlin: implementación y ejemplos
Bibliotecas GraphQL TypeScript: Guía completa para elegir y usar