基于微信开发者工具的博客(微信phxrpc源码分析一)
基于微信开发者工具的博客(微信phxrpc源码分析一)从输入输出的角度继续分析第一节中的示意图(phxrpc设计框架-整体流程.jpg)。现在按照这个思路看下phxrpc的网络库设计:(图片较大,麻烦鼠标右键-在新标签页中打开图片,这样比较清楚)phxrpc设计框架-整体流程.jpg
phxrpc是微信后台团队推出的一个非常简洁小巧的rpc框架。
1 框架分析rpc框架的基础是网络库,网络库通用的设计思路其实很简单。
rpc-server设计.jpg
- 网络库一般有两个角色:一级包工头;二级包工头。两者的关系是一级包工头负责揽活,分配给二级包工头。
- 一级包工头里一般都有个妹子做接待员(Acceptor),负责与外部客户建立连接,也负责将任务通知到二级包工头。
- 二级包工头里也有一个妹子和一帮小兄弟。妹子在调度中心工作,负责协调那帮小兄弟们高效有序的干活。
现在按照这个思路看下phxrpc的网络库设计:(图片较大,麻烦鼠标右键-在新标签页中打开图片,这样比较清楚)
phxrpc设计框架-整体流程.jpg
- 一级包工头是HshaServer,里面的接待员妹子叫HshaServerAcceptor。
- HshaServerAcceptor负责将活分配给二级包工头HshaServerUnit。
- 二级包工头中在调度中心工作的妹子叫UThreadEpollScheduler,那帮小兄弟叫Worker,集中在一个叫WorkerPool的地方工作。UThreadEpollScheduler负责与 HshaServerAcceptor对接,然后将工作分配给WorkerPool中的Worker们。
从输入输出的角度继续分析第一节中的示意图(phxrpc设计框架-整体流程.jpg)。
- 客户端输入首先通过HshaServerAcceptor建立连接
- HshaServerAcceptor将accept文件操作符注册到每个HshaServerUnit中的调度中心里(也就是UThreadEpollScheduler)
- 调度中心的HandlerAcceptedFd()负责将接收到的请求放到请求队列ThdQueue inqueue中
- Worker从ThdQueue inqueue中取请求进行处理,然后将处理完的结果放到返回队列ThdQueue outqueue中
- 调度中心的ActiveSocketFunc()从返回队列取结果进行处理
- 调度中心的HandlerAcceptedFd()将ActiveSocketFunc()的处理结果返回给客户端