gRPC para C++: bibliotecas, exemplos e guia de uso

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

gRPC para C++: bibliotecas, exemplos e guia prático

gRPC é um ambiente moderno e de alto desempenho para chamada de procedimento remoto (RPC), desenvolvido pelo Google. Ele permite que aplicativos cliente e servidor em diferentes linguagens (incluindo C++, Python, Go, Java) se comuniquem entre si com a mesma facilidade de chamadas de funções locais. Para C++, o gRPC fornece uma interface poderosa e fortemente tipada baseada em Protocol Buffers (protobuf), tornando-o a escolha ideal para criar microsserviços e sistemas distribuídos.

Neste artigo, abordaremos as principais bibliotecas, o processo de instalação e criaremos um exemplo completo de servidor e cliente gRPC em C++.



Principais bibliotecas para gRPC em C++

Para trabalhar com gRPC em C++, você precisará dos seguintes componentes:

  • grpc (libgrpc++) — a biblioteca principal do gRPC. Contém a implementação da camada de transporte (HTTP/2), canais, servidores e pilhas assíncronas.
  • protobuf (libprotobuf) — biblioteca para serialização de dados estruturados. Define o formato das mensagens (arquivos .proto) e gera código C++.
  • grpc++ (libgrpc++_unsecure ou libgrpc++_reflection) — wrapper C++ de alto nível para gRPC. Fornece API síncrona e assíncrona para serviços.
  • grpc_cpp_plugin — plugin para o compilador protobuf (protoc), que gera código C++ para servidores e clientes gRPC.
  • abseil-cpp — biblioteca do Google usada pelo gRPC para strings, threads e sincronização (geralmente incluída automaticamente).


Instalação e configuração

A forma recomendada de instalação é compilar a partir do código-fonte ou usar o gerenciador de pacotes vcpkg/conan. Mostraremos a instalação via vcpkg:

# Instalação do vcpkg (se ainda não estiver instalado)git clone https://github.com/Microsoft/vcpkg.gitcd vcpkg./bootstrap-vcpkg.sh

# Instalação do gRPC com suporte a C++./vcpkg install grpc[ssl]

Após a instalação, conecte as bibliotecas no 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)

# Geração de arquivos 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)


Criação do arquivo .proto

Primeiro, definimos o serviço e as mensagens no arquivo hello.proto:

syntax = "proto3";

package hello;

// Requisição: enviamos um nomemessage HelloRequest { string name = 1;}

// Resposta: recebemos uma saudaçãomessage HelloReply { string message = 1;}

// Definimos o serviço gRPCservice Greeter { // Unary RPC (uma requisição — uma resposta) rpc SayHello (HelloRequest) returns (HelloReply);}


Implementação do servidor em C++

Criaremos o arquivo se

Recommendations