注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

mcrouter源码阅读之消息处理流程  

2014-11-10 13:53:35|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 感觉别人开源项目的代码层次结构设计的都非常合理。

mcrouter/lib/network/AsyncMcServerWorker.cpp 
 McParser.cpp    // memcached  协议消息的解析,网络层的事件等
  umMessageReady()
   requestReadyHelper()  调用 server的 onRequest接口

McServerRequestContext-inl.h
  onRequest()

server.cpp
serverLoop()
onRequest()     server的request的实现
    mcrouter_send()  发送个router类

proxy.cpp
onEventBaseAttached()
 request_queue = asox_queue_init(eventBase->getLibeventBase(), priority,
                                  1, 0, 0, &proxy_request_queue_cb,
                                  ASOX_QUEUE_INTRA_PROCESS, this);

router.cpp
 mcrouter_send()
  mcrouter_request_ready_cb
    proxy->dispatchRequest(preq);  //把server的消息转给 proxy类处理

proxy.cpp  
 dispatchRequest()  //每个memory的 request都经过这个处理吧
   rateLimited()  // 简单的队列长度限制
   processRequest() //开始处理
     routeHandlesProcessRequest()   //处理路由,这里又利用 fiberManager.addTaskFinally 多线程执行
      -> ProxyRoute. 
              couldRouteTo() 
              dispatchMcMsg()
                   ->  RootRoute
                           rhMap_.getTargetsForKey   // 过滤出合适路由规则,
                          doRoute()     对每个规则多线程执行          

 route执行的多线程, 依赖于一个fiber库的封装,类似coroutine的轻量级线程
lib/fibers      fiber::addTask


https://github.com/facebook/mcrouter/wiki/List-of-Route-Handles




  评论这张
 
阅读(493)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017