ZBLOG

c++实现rpc demo

以下是一个简单的C++实现RPC(远程过程调用)的示例代码:

server.cpp

#include <iostream>
#include <string>
#include <grpcpp/grpcpp.h>

#include "rpc_example.grpc.pb.h"

using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;

class RPCServiceImpl final : public RPCExample::Service {
    Status SayHello(ServerContext* context, const HelloRequest* request,
                    HelloReply* reply) override {
        std::string name = request->name();
        std::cout << "Received request from client: " << name << std::endl;

        std::string message = "Hello, " + name + "! This is the server.";
        reply->set_message(message);

        return Status::OK;
    }
};

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

client.cpp

#include <iostream>
#include <memory>
#include <string>
#include <grpcpp/grpcpp.h>

#include "rpc_example.grpc.pb.h"

using grpc::Channel;
using grpc::ClientContext;
using grpc::Status;

class RPCClient {
public:
  explicit RPCClient(std::shared_ptr<Channel> channel)
      : stub_(RPCExample::NewStub(channel)) {}

  void SayHello(const std::string& name) {
    HelloRequest request;
    request.set_name(name);

    HelloReply reply;

    ClientContext context;

    Status status = stub_->SayHello(&context, request, &reply);

    if (status.ok()) {
      std::cout << "Received reply from server: " << reply.message()
                << std::endl;
    } else {
      std::cout << "RPC failed. Error code: " << status.error_code()
                << ", error message: " << status.error_message() << std::endl;
    }
  }

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

int main() {
  std::string server_address("localhost:50051");

  RPCClient client(
      grpc::CreateChannel(server_address, grpc::InsecureChannelCredentials()));

  client.SayHello("Alice");
  
  return 0;
}

这是一个基于 gRPC 框架的简单示例,其中定义了一个 RPC service RPCExample,包含一个方法 SayHello,客户端通过调用该方法向服务器发送请求,并接收服务器的响应。你可以根据需要修改和扩展代码来实现更复杂的功能。请确保已经安装了 gRPC 和 Protobuf 相关的依赖库,并根据你自己的需求进行适当调整。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?