前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信phxrpc源码分析(一)-网络库框架分析

微信phxrpc源码分析(一)-网络库框架分析

原创
作者头像
路小饭
修改2019-02-28 18:20:58
2.2K0
修改2019-02-28 18:20:58
举报
文章被收录于专栏:C++开源框架源码分析

phxrpc是微信后台团队推出的一个非常简洁小巧的RPC框架。前段时间看Tars rpc框架有些“审美疲劳”,拿phxrpc换换脑子。

1 框架分析

rpc框架的基础是网络库,网络库通用的设计思路其实很简单。

rpc-server设计.jpg
rpc-server设计.jpg
  • 网络库一般有两个角色:一级包工头;二级包工头。两者的关系是一级包工头负责揽活,分配给二级包工头。
  • 一级包工头里一般都有个妹子做接待员(Acceptor),负责与外部客户建立连接,也负责将任务通知到二级包工头。
  • 二级包工头里也有一个妹子和一帮小兄弟。妹子在调度中心工作,负责协调那帮小兄弟们高效有序的干活。

现在按照这个思路看下phxrpc的网络库设计:(图片较大,麻烦鼠标右键-在新标签页中打开图片,这样比较清楚)

phxrpc设计框架-整体流程.jpg
phxrpc设计框架-整体流程.jpg
  • 一级包工头是HshaServer,里面的接待员妹子叫HshaServerAcceptor。
  • HshaServerAcceptor负责将活分配给二级包工头HshaServerUnit。
  • 二级包工头中在调度中心工作的妹子叫UThreadEpollScheduler,那帮小兄弟叫Worker,集中在一个叫WorkerPool的地方工作。UThreadEpollScheduler负责与 HshaServerAcceptor对接,然后将工作分配给WorkerPool中的Worker们。

2 输入输出流分析

从输入输出的角度继续分析第一节中的示意图(phxrpc设计框架-整体流程.jpg)。

  • 客户端输入首先通过HshaServerAcceptor建立连接
  • HshaServerAcceptor将accept文件操作符注册到每个HshaServerUnit中的调度中心里(也就是UThreadEpollScheduler)
  • 调度中心的HandlerAcceptedFd()负责将接收到的请求放到请求队列ThdQueue inqueue
  • Worker从ThdQueue inqueue中取请求进行处理,然后将处理完的结果放到返回队列ThdQueue outqueue
  • 调度中心的ActiveSocketFunc()从返回队列取结果进行处理
  • 调度中心的HandlerAcceptedFd()将ActiveSocketFunc()的处理结果返回给客户端

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 框架分析
  • 2 输入输出流分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档