C++极简版的RPC框架

本文通过一个100多行代码的C++极简RPC框架,详细解释了RPC客户机/服务器通信过程,包括EchoServerImpl、EchoService_Stub、RpcController等关键组件的工作原理,帮助初学者理解RPC框架的实现细节。文章通过分析代码,解答了关于RPC调用过程中的一些常见疑问。
摘要由CSDN通过智能技术生成

  前言
  
  RPC采用客户机/服务器模式实现两个进程之间的相互通信,socket是RPC经常采用的通信手段之一。当然,除了socket,RPC还有其他的通信方法:http、管道。。。网络开源的RPC框架也比较多,一个功能比较完善的RPC框架代码比较多,如何快速的从这些代码盲海中梳理清楚主要脉络,对于初学者来说比较困难,本文介绍之前自己实现的一个C++极简版的RPC框架,代码只有100多行,希望尽量用少的代码来描述框架以减轻初学者的学习负担,同时便于大家阅读网络上复杂的RPC源码。
  
  1、经典的RPC框架echo例子里面,EchoServer_Stub类是哪里来的?
  
  2、为什么stub.Echo(&controller, &request, &response, nullptr); 调用就执行到server端的Echo函数?
  
  3、stub.Echo(&controller, &request, &response, nullptr); 最后一个参数是nullptr,调用到server端的Echo(controller, request, response, done) 函数时,done指针为什么不为空了?
  
  …
  
  让我们通过下面这个简单的RPC框架,一层一层解开上面的疑惑。
  
  echo_server.cc
  
  复制代码
  
  class EchoServerImpl : public goya::rpc::echo::EchoServer {
  
  public:
  
  EchoServerImpl() {}
  
  virtual ~EchoServerImpl() {}
  
  private:
  
  virtual void Echo(google::protobuf::RpcController* controller,
  
  const goya::rpc::echo::EchoRequest* request,
  
  goya::rpc::echo::EchoResponse* response,
  
  google::protobuf::Closure* done)
  
  {
  
  std::cout << "server received client msg: " << request->message() << std::endl;
  
  response->set_message(
  
  "server say: received msg: ***" + request->message() + std::string("***"));
  
  done->Run();
  
  }
  
  };
  
  int main(int argc, char* argv[])
  
  {
  
  RpcServer rpc_server;
  
  goya::rpc::echo::EchoServer* echo_service = new EchoServerImpl();
  
  if (!rpc_server.RegisterService(echo_service, false)) {
  
  std::cout << "register service failed" << std::endl;
  
  return -1;
  
  }
  
  std::string server_addr("0.0.0.0:12321");
  
  if (!rpc_server.Start(server_addr)) {
  
  std::cout << "start server failed" << std::endl;
  
  return -1;
  
  }
  
  return 0;
  
  }
  
  复制代码
  
  echo_client.cc
  
  复制代码
  
  int main(int argc, char* argv[])
  
  SmallHouseColleague smallHouseColleague www.feihongyul.cn= new SmallHouseColleague(www.tianyueylezc

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值