C++ 使用GRPC框架简单示例

        

请确保已经安装了gRPC和Protobuf,并且已经生成了对应的RPC代码。在这个示例中,我们定义了一个HelloService,包含一个SayHello方法,该方法接收一个HelloRequest对象,并返回一个HelloResponse对象。服务端实现了这个服务,并在指定地址上监听。客户端创建一个HelloClient对象,并通过该对象调用远程方法。

1.服务端代码

#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;
using rpc_example::HelloRequest;
using rpc_example::HelloResponse;
using rpc_example::HelloService;

class HelloServiceImpl final : public HelloService::Service {
  Status SayHello(ServerContext* context, const HelloRequest* request,
                  HelloResponse* response) override {
    std::string prefix("Hello ");
    response->set_message(prefix + request->name());
    return Status::OK;
  }
};

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

2.客户端代码

#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;
using rpc_example::HelloRequest;
using rpc_example::HelloResponse;
using rpc_example::HelloService;

class HelloClient {
 public:
  HelloClient(std::shared_ptr<Channel> channel)
      : stub_(HelloService::NewStub(channel)) {}

  std::string SayHello(const std::string& name) {
    HelloRequest request;
    request.set_name(name);
    HelloResponse response;
    ClientContext context;

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

    if (status.ok()) {
      return response.message();
    } else {
      std::cout << "RPC failed with error code: " << status.error_code()
                << ", error message: " << status.error_message() << std::endl;
      return "RPC failed";
    }
  }

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

int main() {
  std::string server_address("localhost:50051");
  HelloClient client(grpc::CreateChannel(server_address, grpc::InsecureChannelCredentials()));
  std::string name("Alice");
  std::string response = client.SayHello(name);
  std::cout << "Response: " << response << std::endl;
  return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值