ZBLOG

rpc demo

以下是一个简单的RPC(远程过程调用)示例,使用C++和gRPC库。

  1. 首先,你需要安装 gRPC 和 Protocol Buffers。可以从 gRPC 的官方网站(https://grpc.io/)下载并按照指南进行安装。

  2. 创建一个 .proto 文件来定义你的服务接口。例如,创建一个名为 demo.proto 的文件,并添加以下内容:

  1. syntax = "proto3";
  2. package demo;
  3. service Calculator {
  4. rpc Add(AddRequest) returns (AddResponse) {}
  5. }
  6. message AddRequest {
  7. int32 num1 = 1;
  8. int32 num2 = 2;
  9. }
  10. message AddResponse {
  11. int32 result = 1;
  12. }
  1. 使用 Protocol Buffers 编译器生成 C++ 代码。在终端中运行以下命令:
  1. protoc -I=. --cpp_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` demo.proto

这将生成 demo.pb.hdemo.pb.cc 文件。

  1. 创建一个服务器实现你的服务接口。创建一个名为 server.cpp 的文件,并添加以下内容:
  1. #include <iostream>
  2. #include <memory>
  3. #include <string>
  4. #include <grpcpp/grpcpp.h>
  5. #include "demo.grpc.pb.h"
  6. using grpc::Server;
  7. using grpc::ServerBuilder;
  8. using grpc::ServerContext;
  9. using grpc::Status;
  10. using demo::AddRequest;
  11. using demo::AddResponse;
  12. using demo::Calculator;
  13. class CalculatorImpl final : public Calculator::Service {
  14. public:
  15. Status Add(ServerContext* context, const AddRequest* request,
  16. AddResponse* response) override
  17. {
  18. int result = request->num1() + request->num2();
  19. response->set_result(result);
  20. return Status::OK;
  21. }
  22. };
  23. void RunServer() {
  24. std::string server_address("0.0.0.0:50051");
  25. CalculatorImpl service;
  26. ServerBuilder builder;
  27. builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
  28. builder.RegisterService(&service);
  29. std::unique_ptr<Server> server(builder.BuildAndStart());
  30. std::cout << "Server listening on " << server_address << std::endl;
  31. server->Wait();
  32. }
  33. int main(int argc, char** argv) {
  34. RunServer();
  35. return 0;
  36. }

这将创建一个简单的 CalculatorImpl 类来实现 Add 方法。

  1. 创建一个客户端调用你的服务。创建一个名为 client.cpp 的文件,并添加以下内容:
  1. #include <iostream>
  2. #include <memory>
  3. #include <string>
  4. #include <grpcpp/grpcpp.h>
  5. #include "demo.grpc.pb.h"
  6. using grpc::Channel;
  7. using grpc::ClientContext;
  8. using grpc::Status;
  9. using demo::AddRequest;
  10. using demo::AddResponse;
  11. using demo::Calculator;
  12. class CalculatorClient {
  13. public:
  14. CalculatorClient(std::shared_ptr<Channel> channel)
  15. : stub_(Calculator::NewStub(channel)) {}
  16. int Add(int num1, int num2) {
  17. AddRequest request;
  18. request.set_num1(num1);
  19. request.set_num2(num2);
  20. AddResponse response;
  21. ClientContext context;
  22. Status status = stub_->Add(&context, request, &response);
  23. if (status.ok()) {
  24. return response.result();
  25. } else {
  26. std::cout << "RPC failed." << std::endl;
  27. return -1;
  28. }
  29. }
  30. private:
  31. std::unique_ptr<Calculator::Stub> stub_;
  32. };
  33. int main(int argc, char** argv) {
  34. CalculatorClient client(grpc::CreateChannel("localhost:50051",
  35. grpc::InsecureChannelCredentials()));
  36. int result = client.Add(3, 5);
  37. std::cout << "Result: " << result << std::endl;
  38. return 0;
  39. }

这将创建一个 CalculatorClient 类来连接到服务器并调用 Add 方法。

  1. 使用以下命令编译服务器和客户端代码:
  1. g++ -std=c++11 -o server server.cpp demo.pb.cc demo.grpc.pb.cc `pkg-config --cflags --libs grpc`
  2. g++ -std=c++11 -o client client.cpp demo.pb.cc demo.grpc.pb.cc `pkg-config --cflags --libs grpc`
  1. 在不同的终端窗口中运行服务器和客户端:
  1. ./server
  2. ./client

你应该能够看到客户端输出结果:Result: 8,表示 RPC 调用成功。

这是一个简单的RPC示例,可以根据需要扩展和定制。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=15035

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?