gRPC para C++: bibliotecas, configuração e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao gRPC para C++



gRPC é um framework moderno para chamada remota de procedimentos (RPC), desenvolvido pelo Google. Ele utiliza Protocol Buffers (protobuf) para serialização de dados e HTTP/2 como protocolo de transporte. Para a linguagem C++, o gRPC fornece bibliotecas nativas que permitem criar microsserviços e sistemas distribuídos de alto desempenho.



Neste artigo, abordaremos as principais bibliotecas, a configuração do ambiente e escreveremos um exemplo completo de aplicação cliente-servidor em C++.



Principais bibliotecas gRPC para C++



Para trabalhar com gRPC em C++, é necessário instalar vários componentes:



  • grpc — biblioteca principal, contendo implementações do servidor e do cliente.
  • grpc++ — wrapper C++ sobre o gRPC, fornecendo uma API conveniente.
  • protobuf — biblioteca para trabalhar com Protocol Buffers (geração de classes, serialização/desserialização).
  • grpc_cpp_plugin — plugin para o compilador protoc, que gera código C++ a partir de arquivos .proto.


Também podem ser necessárias dependências: abseil-cpp, openssl, zlib e c-ares.



Instalação do gRPC e protobuf



A forma recomendada é a compilação a partir do código-fonte usando CMake. Exemplo 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


Após a instalação, verifique a disponibilidade do compilador protobuf e do plugin:



protoc --versionwhich grpc_cpp_plugin


Definição do serviço através do arquivo .proto



Criaremos o arquivo example.proto:



syntax = "proto3";

package example;

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

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


Geraremos o código C++:



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


Como resultado, surgirão os arquivos: example.pb.h, example.pb.cc, example.grpc.pb.h, example.grpc.pb.cc.



Implementação do servidor em C++



Crie o arquivo 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;}


Implementação do cliente em C++



Crie o arquivo 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