用 C++ 做 gRPC 微服务,核心是三步:写 .proto 定义接口、用 protoc 生成 C++ 代码、在服务端/客户端中调用生成的类和方法。不复杂,但容易卡在环境配置和生命周期管理上。
确保系统已安装:
find_package(gRPC CONFIG)
不建议用 apt/yum 直接装 grpc-dev —— Ubuntu 的包常滞后且缺 C++ 插件支持。
例如定义一个简单用户服务:
// user_service.proto syntax = "proto3"; package example;service UserService { rpc GetUser (UserRequest) returns (UserResponse); }
message UserRequest { int32 id = 1; }
message UserResponse { int32 id = 1; string name = 2; bool exists = 3; }
执行生成命令(需确保 protoc 能找到 gRPC 插件):
protoc -I . --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` user_service.proto protoc -I . --cpp_out=. user_service.proto
会生成 user_service.pb.h/.cc 和 user_service.grpc.pb.h/.cc。注意:两个 .h 文件都要 include,否则编译报错。
继承自生成的 UserService::Service 类,重写 RPC 方法:
class UserServiceImpl final : public example::UserService::Service {
public:
Status GetUser(ServerContext* context, const UserRequest* request,
UserResponse* response) override {
if (request->id() == 123) {
response->set_id(123);
response->set_name("Alice");
response->set_exists(true);
} else {
response->set_exists(false);
}
return Status::OK;
}
};启动服务器时注意:
用 ServerBuilder 添加监听地址(如 "0.0.0.0:50051")builder.RegisterService(&service))builder.BuildAndStart() 后,服务即运行 —— 不需要手动 run() 循环std::unique_ptr,它控制生命周期;析构即关闭服务创建 Channel 和 Stub,再发起调用:
auto channel = grpc::CreateChannel("localhost:50051", grpc::InsecureChannelCredentials());
auto stub = example::UserService::NewStub(channel);
ClientContext context;
UserRequest req;
req.set_id(123);
UserResponse resp;
Status status = stub->GetUser(&context, req, &resp);
if (status.ok()) {
std::cout << "Name: " << resp.name() << "\n";
} else {
std::cerr << "RPC failed: " << status.error_message() << "\n";
}
关键点:
InsecureChannelCredentials() 仅用于开发;生产务必用 ssl_credentials 并配置根证书AsyncUnaryCall + CompletionQueue,但复杂度明显上升整个流程跑通后,就可以加日志、健康检查(gRPC 自带 /healthz)、服务发现(配合 Consul/Etcd)、熔断(用 client-side interceptor 封装)了。C++ gRPC 性能高、控制强,适合对延迟和资源敏感的微服务场景。
# git
# github
# ubuntu
# ssl
# ai
# c++
# 环境配置
# red
# 封装
# include
# 循环
# 继承
# 接口
# 线程
# channel
# 异步
# etcd
# consul
# rpc
# 服务端
# 客户端
# 三步
# 都要
# 也没
# 不需要
# 并在
# 重写
# 能找到
# 自带
相关文章:
测试制作网站有哪些,测试性取向的权威测试或者网站?
如何在宝塔面板中修改默认建站目录?
图册素材网站设计制作软件,图册的导出方式有几种?
已有域名能否直接搭建网站?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
如何用搬瓦工VPS快速搭建个人网站?
建站之星24小时客服电话如何获取?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
购物网站制作公司有哪些,哪个购物网站比较好?
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何制作网站标识牌,动态网站如何制作(教程)?
制作网站的基本流程,设计网站的软件是什么?
宝塔面板如何快速创建新站点?
安徽网站建设与外贸建站服务专业定制方案
宁波自助建站系统如何快速打造专业企业网站?
如何选择PHP开源工具快速搭建网站?
建站之星logo尺寸如何设置最合适?
如何快速打造个性化非模板自助建站?
高端建站如何打造兼具美学与转化的品牌官网?
为什么Go需要go mod文件_Go go mod文件作用说明
佛山网站制作系统,佛山企业变更地址网上办理步骤?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
建站之星备案流程有哪些注意事项?
,石家庄四十八中学官网?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
详解jQuery停止动画——stop()方法的使用
如何通过虚拟主机快速搭建个人网站?
如何选择高性价比服务器搭建个人网站?
建站上传速度慢?如何优化加速网站加载效率?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何通过可视化优化提升建站效果?
北京的网站制作公司有哪些,哪个视频网站最好?
如何快速生成可下载的建站源码工具?
,制作一个手机app网站要多少钱?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
如何用AWS免费套餐快速搭建高效网站?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
建站主机是什么?如何选择适合的建站主机?
Python如何创建带属性的XML节点
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
昆明网站制作哪家好,昆明公租房申请网上登录入口?
建站主机选购指南:核心配置优化与品牌推荐方案
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
建站org新手必看:2024最新搭建流程与模板选择技巧
Python路径拼接规范_跨平台处理说明【指导】
如何零基础在云服务器搭建WordPress站点?
*请认真填写需求信息,我们会在24小时内与您取得联系。