gRPC是C++微服务中基于Protocol Buffers和HTTP/2的高性能RPC框架。1. 用.proto定义服务与消息;2. protoc生成C++桩代码并链接gRPC库;3. 异步服务端基于CompletionQueue;4. 客户端按需选同步或异步调用;5. 通过禁用Nagle、调优HTTP/2参数、复用Channel等实现性能优化。
gRPC 是 C++ 微服务中实现高性能 RPC 的主流选择,核心在于基于 Protocol Buffers 的接口定义 + 异步/同步客户端-服务端通信。它默认使用 HTTP/2,支持多路复用、流控和头部压缩,天然适合低延迟、高吞吐的微服务交互。
所有 gRPC 通信始于一个清晰的接口契约。用 .proto 文件描述服务方法、请求响应结构和数据类型:
service 块声明 RPC 方法(支持 unary、server streaming、client streaming、bidi streaming)syntax = "proto3";
import)示例 helloworld.proto:
syntax = "proto3";
package helloworld;
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
service Greeter {
rpc SayHello(HelloRequest) returns (HelloReply);
}
用 protoc 编译器配合 gRPC 插件生成客户端和服务端桩代码:
cmake 构建,或用 vcpkg/conan 管理依赖)protoc --grpc_out=. --cpp_out=. -I. helloworld.proto(需先设置 PROTOC_GEN_GRPC_CPP)helloworld.grpc.pb.h/.cc 和 helloworld.pb.h/.cc
gRPC::grpc++、gRPC::grpc++_reflection(可选)等 target高性能服务端应优先采用异步 API(AsyncGenericService 或基于 CompletionQueue 的自定义服务类),避免线程阻塞:
ServerBuilder,添加监听地址、注册服务实例、设置最大并发数ServerContext + CompletionQueue 事件循环RequestXXX 启动异步等待,用 Finish 发送响应,全程无锁回调驱动
ThreadPool)分发任务,但注意 completion queue 的线程安全边界同步客户端适合简单调用或测试;生产环境高频调用建议异步 + CompletionQueue:
Channel(推荐 grpc::CreateChannel(..., ...),支持负载均衡策略如 round_robin)Status 和响应对象PrepareAsyncXXX + StartCall + Finish,通过 tag 关联上下文ClientContext::set_deadline)、TLS 认证(SslCredentials)提升健壮性真正发挥 gRPC 高性能,需关注底层配置与使用习惯:
ChannelArguments args; args.SetInt(GRPC_ARG_TCP_NODELAY, 1);
GRPC_ARG_MAX_CONCURRENT_STREAMS、合理设置初始窗口大小ClientContext,可池化或复用ERROR 或关闭,调试期再开 INFO