ZBLOG

rpc demo

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

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

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

syntax = "proto3";

package demo;

service Calculator {
  rpc Add(AddRequest) returns (AddResponse) {}
}

message AddRequest {
  int32 num1 = 1;
  int32 num2 = 2;
}

message AddResponse {
  int32 result = 1;
}
  1. 使用 Protocol Buffers 编译器生成 C++ 代码。在终端中运行以下命令:
protoc -I=. --cpp_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` demo.proto

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

  1. 创建一个服务器实现你的服务接口。创建一个名为 server.cpp 的文件,并添加以下内容:
#include <iostream>
#include <memory>
#include <string>

#include <grpcpp/grpcpp.h>

#include "demo.grpc.pb.h"

using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;
using demo::AddRequest;
using demo::AddResponse;
using demo::Calculator;

class CalculatorImpl final : public Calculator::Service {
public:
    Status Add(ServerContext* context, const AddRequest* request,
               AddResponse* response) override
    {
        int result = request->num1() + request->num2();
        response->set_result(result);
        return Status::OK;
    }
};

void RunServer() {
  std::string server_address("0.0.0.0:50051");
  CalculatorImpl 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();
}

int main(int argc, char** argv) {
  RunServer();

  return 0;
}

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

  1. 创建一个客户端调用你的服务。创建一个名为 client.cpp 的文件,并添加以下内容:
#include <iostream>
#include <memory>
#include <string>

#include <grpcpp/grpcpp.h>

#include "demo.grpc.pb.h"

using grpc::Channel;
using grpc::ClientContext;
using grpc::Status;
using demo::AddRequest;
using demo::AddResponse;
using demo::Calculator;

class CalculatorClient {
public:
    CalculatorClient(std::shared_ptr<Channel> channel)
        : stub_(Calculator::NewStub(channel)) {}

    int Add(int num1, int num2) {
        AddRequest request;
        request.set_num1(num1);
        request.set_num2(num2);

        AddResponse response;

        ClientContext context;

        Status status = stub_->Add(&context, request, &response);

        if (status.ok()) {
            return response.result();
        } else {
            std::cout << "RPC failed." << std::endl;
            return -1;
        }
    }

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

int main(int argc, char** argv) {
  CalculatorClient client(grpc::CreateChannel("localhost:50051",
                                              grpc::InsecureChannelCredentials()));
  int result = client.Add(3, 5);
  std::cout << "Result: " << result << std::endl;

  return 0;
}

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

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

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?