当前位置: 首页 > news >正文

基于VS2022在Windows上首次尝试开发C++ gRPC服务端和客户端的详细步骤

根据比例生成图片 (3).png

文章目录

      • **1. 创建解决方案与项目**
      • **2. 编写proto文件**
      • **3. 生成gRPC代码**
      • **4. 配置项目属性**
        • **服务端项目(gRPCServer)**
        • **客户端项目(gRPCClient)**
      • **5. 实现服务端代码**
      • **6. 实现客户端代码**
      • **7. 编译与运行**
      • **注意事项**

我已经通过vcpkg安装好本地grpc环境


1. 创建解决方案与项目

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

2. 编写proto文件

  1. 在解决方案目录下创建protos文件夹,新建greet.proto文件(示例内容如下):
syntax = "proto3";
service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest { string name = 1; }
message HelloReply { string message = 1; }

3. 生成gRPC代码

  1. 打开开发者命令行工具,执行以下命令(注意路径替换):
# 生成消息序列化代码
protoc -I=protos/ --cpp_out=protos/ protos/greet.proto

# 生成gRPC服务代码(注意grpc_cpp_plugin路径)
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.hgreet.pb.cc greet.grpc.pb.hgreet.grpc.pb.cc 四个文件


4. 配置项目属性

服务端项目(gRPCServer)
  1. C/C++ → 常规 → 附加包含目录 添加:
   C:\vcpkg\vcpkg\installed\x64-windows\include
   $(ProjectDir)\protos
  1. 链接器 → 常规 → 附加库目录 添加:
   C:\vcpkg\vcpkg\installed\x64-windows\lib
  1. 链接器 → 输入 → 附加依赖项 添加:
   grpc++.lib;grpc++_reflection.lib;grpc.lib;gpr.lib;protobuf.lib;libprotoc.lib
  1. C/C++ → 语言 → C++ 语言标准 设置为 “ISO C++17 标准”
客户端项目(gRPCClient)

配置步骤同上,与服务端完全一致


5. 实现服务端代码

gRPCServer项目中添加server.cpp

#include <grpcpp/grpcpp.h>
#include "protos/greet.grpc.pb.h"

class GreeterServiceImpl final : public Greeter::Service {
  grpc::Status SayHello(grpc::ServerContext* context, 
                       const HelloRequest* request, 
                       HelloReply* reply) override {
    reply->set_message("Hello " + request->name());
    return grpc::Status::OK;
  }
};

void RunServer() {
  std::string server_address("0.0.0.0:50051");
  GreeterServiceImpl service;
  
  grpc::ServerBuilder builder;
  builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
  builder.RegisterService(&service);
  
  std::unique_ptr<grpc::Server> server(builder.BuildAndStart());
  std::cout << "Server listening on " << server_address << std::endl;
  server->Wait();
}

int main() {
  RunServer();
  return 0;
}

6. 实现客户端代码

gRPCClient项目中添加client.cpp

#include <grpcpp/grpcpp.h>
#include "protos/greet.grpc.pb.h"

class GreeterClient {
public:
  GreeterClient(std::shared_ptr<grpc::Channel> channel) 
    : stub_(Greeter::NewStub(channel)) {}
  
  std::string SayHello(const std::string& name) {
    HelloRequest request;
    request.set_name(name);
    
    HelloReply reply;
    grpc::ClientContext context;
    grpc::Status status = stub_->SayHello(&context, request, &reply);
    
    if (status.ok()) return reply.message();
    else return "RPC failed";
  }

private:
  std::unique_ptr<Greeter::Stub> stub_;
};

int main() {
  GreeterClient client(grpc::CreateChannel("localhost:50051", 
                      grpc::InsecureChannelCredentials()));
  std::cout << client.SayHello("World") << std::endl;
  return 0;
}

7. 编译与运行

  1. 生成解决方案:右键解决方案 → 生成解决方案
  2. 启动服务端:右键gRPCServer → 调试 → 启动新实例
  3. 启动客户端:右键gRPCClient → 调试 → 启动新实例
    • 正确输出应为:Hello World

注意事项

  1. 若出现 “无法打开 grpc++/impl/codegen/config.h” 错误,检查vcpkg是否安装完整(执行vcpkg install grpc:x64-windows
  2. 若链接失败,确认所有.lib文件是否存在于C:\vcpkg\vcpkg\installed\x64-windows\lib目录

image.png

加粗样式

相关文章:

  • @runtime_checkable 装饰器
  • Android WindowContainer窗口结构
  • 基于springboot 以及vue前后端分离架构的求职招聘系统设计与实现
  • TCP文件传输
  • 开发一个音响控制板程序,需要从硬件架构设计、通信协议选择、核心功能实现三个层面进行系统化开发。以下是基于工业级开发流程的实施方案
  • python-leetcode-加一
  • 【vscode】VScode Remote SSH配置
  • WPF学习笔记
  • Vue 3 30天精进之旅:Day 24 - 国际化支持
  • 如何查看 Linux 服务器的 MAC 地址:深入解析与实践指南
  • JavaScript设计模式 -- 外观模式
  • 【学习资源】时间序列数据分析方法(1)
  • Dify - 创建 RAG Workflow 及 Restful HTTP 请求
  • windows第十章 数值型关联变量和控件型关联变量
  • DeepSeek-R1论文阅读及本地调用
  • 深入理解JVM的运行时数据区
  • 【鸿蒙开发】第三十六章 状态管理 - V1V2混用和迁移指导
  • 清影2.0(AI视频生成)技术浅析(二):自然语言处理
  • Next.js【详解】获取数据(访问接口)
  • 什么是高亮环形光源
  • 淮南家政网站建设地址/宁波seo公司网站推广
  • 整站下载器 做网站地图/aso搜索优化
  • 做手机网站要注意/十五种常见的销售策略
  • 世界十大网站排名/营销型网站更受用户欢迎的原因是
  • 金融网站织梦模板免费下载/百度官方网首页
  • 建设快照网站/竞价什么意思