基于VS2022在Windows上初次实验开发C++ gRPC服务端和客户端的具体步调

[复制链接]
发表于 2025-11-1 02:01:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×



   我已经通过vcpkg安装好本地grpc情况
  
1. 创建办理方案与项目


  • 打开VS2022 → 创建新项目 → 选择 “空项目” ,分别创建服务端(如gRPCServer)和客户端(如gRPCClient)项目
  • 右键办理方案 → 添加 → 新建项 → “头文件(.h)” 和 “源文件(.cpp)” ,分别用于服务端和客户端代码

2. 编写proto文件


  • 在办理方案目次下创建protos文件夹,新建greet.proto文件(示例内容如下):
  1. syntax = "proto3";
  2. service Greeter {
  3.   rpc SayHello (HelloRequest) returns (HelloReply) {}
  4. }
  5. message HelloRequest { string name = 1; }
  6. message HelloReply { string message = 1; }
复制代码

3. 天生gRPC代码


  • 打开开发者下令行工具,实行以下下令(注意路径更换):
  1. # 生成消息序列化代码
  2. protoc -I=protos/ --cpp_out=protos/ protos/greet.proto
  3. # 生成gRPC服务代码(注意grpc_cpp_plugin路径)
  4. protoc -I=protos/ --grpc_out=protos/ --plugin=protoc-gen-grpc="C:\vcpkg\vcpkg\installed\x64-windows\tools\grpc\grpc_cpp_plugin.exe" protos/greet.proto
复制代码
天生greet.pb.h、greet.pb.cc 、greet.grpc.pb.h、greet.grpc.pb.cc 四个文件

4. 设置项目属性

服务端项目(gRPCServer)


  • C/C++ → 通例 → 附加包罗目次 添加:
  1.    C:\vcpkg\vcpkg\installed\x64-windows\include
  2.    $(ProjectDir)\protos
复制代码

  • 链接器 → 通例 → 附加库目次 添加:
  1.    C:\vcpkg\vcpkg\installed\x64-windows\lib
复制代码

  • 链接器 → 输入 → 附加依赖项 添加:
  1.    grpc++.lib;grpc++_reflection.lib;grpc.lib;gpr.lib;protobuf.lib;libprotoc.lib
复制代码

  • C/C++ → 语言 → C++ 语言尺度 设置为 “ISO C++17 尺度”
客户端项目(gRPCClient)

设置步调同上,与服务端完全划一

5. 实现服务端代码

在gRPCServer项目中添加server.cpp:
  1. #include <grpcpp/grpcpp.h>
  2. #include "protos/greet.grpc.pb.h"
  3. class GreeterServiceImpl final : public Greeter::Service {
  4.   grpc::Status SayHello(grpc::ServerContext* context,
  5.                        const HelloRequest* request,
  6.                        HelloReply* reply) override {
  7.     reply->set_message("Hello " + request->name());
  8.     return grpc::Status::OK;
  9.   }
  10. };
  11. void RunServer() {
  12.   std::string server_address("0.0.0.0:50051");
  13.   GreeterServiceImpl service;
  14.   
  15.   grpc::ServerBuilder builder;
  16.   builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
  17.   builder.RegisterService(&service);
  18.   
  19.   std::unique_ptr<grpc::Server> server(builder.BuildAndStart());
  20.   std::cout << "Server listening on " << server_address << std::endl;
  21.   server->Wait();
  22. }
  23. int main() {
  24.   RunServer();
  25.   return 0;
  26. }
复制代码

6. 实现客户端代码

在gRPCClient项目中添加client.cpp:
  1. #include <grpcpp/grpcpp.h>
  2. #include "protos/greet.grpc.pb.h"
  3. class GreeterClient {
  4. public:
  5.   GreeterClient(std::shared_ptr<grpc::Channel> channel)
  6.     : stub_(Greeter::NewStub(channel)) {}
  7.   
  8.   std::string SayHello(const std::string& name) {
  9.     HelloRequest request;
  10.     request.set_name(name);
  11.    
  12.     HelloReply reply;
  13.     grpc::ClientContext context;
  14.     grpc::Status status = stub_->SayHello(&context, request, &reply);
  15.    
  16.     if (status.ok()) return reply.message();
  17.     else return "RPC failed";
  18.   }
  19. private:
  20.   std::unique_ptr<Greeter::Stub> stub_;
  21. };
  22. int main() {
  23.   GreeterClient client(grpc::CreateChannel("localhost:50051",
  24.                       grpc::InsecureChannelCredentials()));
  25.   std::cout << client.SayHello("World") << std::endl;
  26.   return 0;
  27. }
复制代码

7. 编译与运行


  • 天生办理方案:右键办理方案 → 天生办理方案
  • 启动服务端:右键gRPCServer → 调试 → 启动新实例
  • 启动客户端:右键gRPCClient → 调试 → 启动新实例

    • 精确输出应为:Hello World


注意事项


  • 若出现 “无法打开 grpc++/impl/codegen/config.h” 错误,查抄vcpkg是否安装完备(实行vcpkg install grpc:x64-windows)
  • 若链接失败,确认全部.lib文件是否存在于C:\vcpkg\vcpkg\installed\x64-windows\lib目次

加粗样式
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表