gRPC for C++: 库、配置和代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

gRPC for C++ 简介



gRPC 是一个由 Google 开发的现代远程过程调用 (RPC) 框架。它使用 Protocol Buffers (protobuf) 进行数据序列化,并使用 HTTP/2 作为传输协议。对于 C++ 语言,gRPC 提供了原生库,允许您创建高性能的微服务和分布式系统。



在本文中,我们将介绍主要的库、环境配置,并编写一个完整的 C++ 客户端-服务器应用程序示例。



gRPC for C++ 的主要库



要在 C++ 中使用 gRPC,需要安装几个组件:



  • grpc — 核心库,包含服务器和客户端的实现。
  • grpc++ — gRPC 的 C++ 封装,提供便捷的 API。
  • protobuf — 用于处理 Protocol Buffers 的库(类生成、序列化/反序列化)。
  • grpc_cpp_plugin — protoc 编译器的插件,用于从 .proto 文件生成 C++ 代码。


可能还需要一些依赖项:abseil-cpp、openssl、zlib 和 c-ares。



安装 gRPC 和 protobuf



推荐的方法是通过 CMake 从源码构建。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


安装后,检查 protobuf 编译器和插件是否可用:



protoc --versionwhich grpc_cpp_plugin


通过 .proto 文件定义服务



创建一个 example.proto 文件:



syntax = "proto3";

package example;

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

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


生成 C++ 代码:



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


结果将生成以下文件:example.pb.h、example.pb.cc、example.grpc.pb.h、example.grpc.pb.cc。



用 C++ 实现服务器



创建一个 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;}


用 C++ 实现客户端



创建一个 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

推荐