C++如何使用gRPC实现RPC通信?(Protobuf示例)


gRPC实现C++ RPC通信需三步:定义.proto接口、用protoc生成C++代码(含消息类和Stub/Service)、在服务端继承Service实现方法、客户端调用Stub。

c++如何使用grpc实现rpc通信?(protobuf示例)

用gRPC实现C++的RPC通信,核心是三步:写好.proto接口定义、用protoc生成C++代码、在客户端和服务端分别实现Stub调用和Service逻辑。Protobuf负责数据序列化,gRPC负责网络传输和调用调度。

1. 定义服务接口(.proto文件)

先创建helloworld.proto,声明服务方法和消息结构:

syntax = "proto3";
<p>package helloworld;</p><p>// 请求和响应消息
message HelloRequest {
string name = 1;
}</p><p>message HelloReply {
string message = 1;
}</p><p>// RPC服务
service Greeter {
rpc SayHello(HelloRequest) returns (HelloReply) {}
}

注意:syntax = "proto3"是必须的;package影响生成的C++命名空间;每个字段要有唯一数字标签。

立即学习“C++免费学习笔记(深入)”;

2. 生成C++代码

安装gRPC和protobuf后,运行以下命令生成头文件和源码:

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

会生成两个文件:

Text-To-Pokemon口袋妖怪 Text-To-Pokemon口袋妖怪

输入文本生成自己的Pokemon,还有各种选项来定制自己的口袋妖怪

Text-To-Pokemon口袋妖怪 1487 查看详情 Text-To-Pokemon口袋妖怪
  • helloworld.pb.h / helloworld.pb.cc:含消息类(如HelloRequest
  • helloworld.grpc.pb.h / helloworld.grpc.pb.cc:含Stub类(Greeter::Stub)和服务基类(Greeter::Service

编译时需链接libprotobuflibgrpclibgrpc++

3. 实现服务端

继承Greeter::Service,重写SayHello方法,用ServerContext控制生命周期:

class GreeterServiceImpl final : public helloworld::Greeter::Service {
 public:
  Status SayHello(ServerContext* context, const helloworld::HelloRequest* request,
                  helloworld::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(); // 阻塞等待
}

4. 实现客户端

Greeter::NewStub()创建Stub,发起同步或异步调用:

int main() {
  std::string target_str = "localhost:50051";
  auto channel = grpc::CreateChannel(target_str, grpc::InsecureChannelCredentials());
  auto stub = helloworld::Greeter::NewStub(channel);
<p>helloworld::HelloRequest request;
request.set_name("World");</p><p>helloworld::HelloReply reply;
ClientContext context;
Status status = stub->SayHello(&context, request, &reply);</p><p>if (status.ok()) {
std::cout << reply.message() << std::endl;
} else {
std::cout << "RPC failed: " << status.error_message() << std::endl;
}
return 0;
}

关键点:

  • ClientContext可设置超时、自定义元数据
  • 同步调用直接返回Status;异步调用需配合CompletionQueue
  • grpc::InsecureChannelCredentials()用于本地测试,生产环境应改用TLS凭证

基本上就这些。只要.proto定义清晰、生成步骤正确、服务/客户端按规范实现,C++ gRPC通信就能跑起来。不复杂但容易忽略链接库和证书配置。

以上就是C++如何使用gRPC实现RPC通信?(Protobuf示例)的详细内容,更多请关注其它相关文章!


# red  # 如何使用  # 自己的  # 客户端  # c++  # 搜索seo哪家好  # 丹东网站优化免费咨询  # 广东网站制作视频推广  # 企业网站建设作业答案  # 常州网站建设网页设计  # 宁波网站建设找哪家公司  # 虎门制造业网站建设  # 平山银联关键词排名介绍  # 网站合作 微信推广  # SEO方案长尾关键词  # 中文网  # 相关文章  # 要有  # 就能  # 单元测试  # 三步  # 服务端 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: excel怎么制作考勤表 excel考勤模板与函数公式讲解  消除网页顶部意外空白线:CSS布局常见问题与解决方案  精通VS Code多光标编辑以实现闪电般快速的修改  WooCommerce 新客户订单自动添加管理员备注教程  国际经济与贸易就业方向解析  如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧  使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留  Vue 3中独立响应式实例的创建与应用  自定义你的VS Code状态栏,监控关键信息  苹果iPhone14ProMax如何新建AppleID_iPhone14ProMax新建AppleID具体流程  优酷官网登录入口电脑版 优酷官网网址入口  外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!  鸿蒙单条备忘录如何加密  PHP与SQL实践:高效实现数据复制与特定列值修改  iPhone 14 Pro如何更改区域设置_iPhone 14 Pro地区语言修改教程  AO3官方镜像链接 | 最新防走失网址永久收藏  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口  《三国:谋定天下》平民全阶段通用阵容  中通快递官网指定查询 中通快递单号查询平台入口  《单词速记宝》设置学习计划方法  139邮箱登录入口官网 139邮箱登录入口官网网址  Python中处理嵌套字典与列表的数据提取与过滤教程  毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明  C++如何实现单例模式_C++线程安全的单例模式写法  《金山词霸》语音翻译方法  在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示  TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法  使用 J*aScript 随机化 CSS Grid 布局中的元素顺序  CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条  CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  抖音猜你想搜能说明对方搜过吗  《健康大兴》注册方法介绍  《海豚家》注销账号方法  《大润发优鲜》充值方法介绍  学习通网页版课程打不开_课程无法访问时的解决方法  悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置  键盘保修需要什么_键盘售后维修流程  我居然低估了 DeepSeek,这次更新它做到了这些!  更换小红书群背景怎么换?小红书群规则怎么设置?  动漫岛汉化官网网 动漫岛官方动漫汉化地址  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较  稻壳阅读器官方直达网址链接 稻壳阅读器文档阅读平台主页资源入口  猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程  《随手记》关闭首页消息推送方法  电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】  抖音评论无法发送如何修复 抖音评论功能操作指南  Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题 

 2025-12-17

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.