马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
我已经通过vcpkg安装好本地grpc情况
1. 创建办理方案与项目
- 打开VS2022 → 创建新项目 → 选择 “空项目” ,分别创建服务端(如gRPCServer)和客户端(如gRPCClient)项目
- 右键办理方案 → 添加 → 新建项 → “头文件(.h)” 和 “源文件(.cpp)” ,分别用于服务端和客户端代码
2. 编写proto文件
- 在办理方案目次下创建protos文件夹,新建greet.proto文件(示例内容如下):
- syntax = "proto3";
- service Greeter {
- rpc SayHello (HelloRequest) returns (HelloReply) {}
- }
- message HelloRequest { string name = 1; }
- message HelloReply { string message = 1; }
复制代码 3. 天生gRPC代码
- 打开开发者下令行工具,实行以下下令(注意路径更换):
- # 生成消息序列化代码
- 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.h、greet.pb.cc 、greet.grpc.pb.h、greet.grpc.pb.cc 四个文件
4. 设置项目属性
服务端项目(gRPCServer)
- C:\vcpkg\vcpkg\installed\x64-windows\include
- $(ProjectDir)\protos
复制代码- C:\vcpkg\vcpkg\installed\x64-windows\lib
复制代码- grpc++.lib;grpc++_reflection.lib;grpc.lib;gpr.lib;protobuf.lib;libprotoc.lib
复制代码
- 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. 编译与运行
- 天生办理方案:右键办理方案 → 天生办理方案
- 启动服务端:右键gRPCServer → 调试 → 启动新实例
- 启动客户端:右键gRPCClient → 调试 → 启动新实例
注意事项
- 若出现 “无法打开 grpc++/impl/codegen/config.h” 错误,查抄vcpkg是否安装完备(实行vcpkg install grpc:x64-windows)
- 若链接失败,确认全部.lib文件是否存在于C:\vcpkg\vcpkg\installed\x64-windows\lib目次
加粗样式
|