RPC 框架梳理——rpc框架对远程调用的处理流程梳理

本文详细梳理了RPC框架在接收到远程调用请求时的处理流程。基于muduo网络库,RPC服务发布方启动后进入阻塞状态。当有RPC请求时,onMessage回调函数被触发,解析请求的字符流,包括header、service_name、method_name、args等信息,找到对应的方法进行本地调用,并通过SendRpcResponce将结果回传给调用方。
摘要由CSDN通过智能技术生成

背景

  当rpc服务的发布方启动了rpc服务的发布节点后,rpc服务的提供方便进入阻塞状态,等待远程的rpc调用请求。
在这里插入图片描述
  首先我们要梳理,在run中,rpc框架主要做了哪些事情。因为myrpc框架是基于木朵网络库开发的,所以网络部分使用了muduo的epoll+多线程。Run()主要工作就是提供rpc网络监听。
在这里插入图片描述
  主要设置有新连接时的回调处理、设置有新消息(有rpc请求)时的回调处理。本文主要梳理当有rpc请求时的框架处理流程。

有rpc请求时的回调函数——onMessage

   如果远程有一个rpc服务的调用请求,那么onMessage方法就会响应。具体步骤如下:

  1. 取出远程rpc请求的字符流
  2. 根据事先约定好的字符流构成,依次解析出header_size、service_name、method_name、args_size、args。
  3. 根据获得的service_name和method_name,获取method对象
  4. 调用在当前rpc节点上已经发布过的方法
// 已建立连接用户的读写事件回调,如果远程有一个rpc服务的调用请求,那么OnMessage方法就会响应
void RpcProvider::OnMessage(const muduo::net::TcpConnectionPtr &conn,
                            muduo::net::Buffer* buffer, 
                            muduo::Timestamp)
{
   
    // 网络上接收的远程rpc请求的字符流 里面会包含请求方法的名字(以及类名/service_name),参数类型
    std::string recv_buf = buffer->retrieveAllAsString();
    // 从字符流中读取前4个字节的内容
    uint32_t header_size = 0;
    recv_buf.copy((char*)&header_size,4,0);  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值