快捷搜索:  汽车  科技

基于微信开发者工具的博客(微信phxrpc源码分析一)

基于微信开发者工具的博客(微信phxrpc源码分析一)从输入输出的角度继续分析第一节中的示意图(phxrpc设计框架-整体流程.jpg)。现在按照这个思路看下phxrpc的网络库设计:(图片较大,麻烦鼠标右键-在新标签页中打开图片,这样比较清楚)phxrpc设计框架-整体流程.jpg

phxrpc是微信后台团队推出的一个非常简洁小巧的rpc框架。

1 框架分析

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

基于微信开发者工具的博客(微信phxrpc源码分析一)(1)

rpc-server设计.jpg


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

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

基于微信开发者工具的博客(微信phxrpc源码分析一)(2)

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()的处理结果返回给客户端

猜您喜欢: