tars-网络层-服务端实现
2021-05-23 14:18:43   0  举报             
     
         
 鹅厂开源通讯框架源码分析
    作者其他创作
 大纲/内容
 4)setProtocol设协议解析函数
    new TC_EpollServer
  NetThread::processNet()
  processNet{   Connection *cPtr = getConnection(uid);    }
  8)启动网络线程handle:run
  3)bind服务侦听端口
  TC_EpollServer::NetThread服务连接管理
  +Connection+ConnectionList 带有时间链表的map+NetThread::bind(BindAdapterPtr &lsPtr)+bind(lsPtr){  createSocket 创建套接字  setKeepAlive  setTcpNoDelay  setNoCloseWait}+start+run//循环监听网路连接请求{    processNet;insertRecvQueue处理网络收包,push到线程安全链表recv_queue      _rbuffer;然后由handle线程去处理分包}
  TC_EpollServer * Server基类 注册协议解析器 注册逻辑处理器 注册管理端口处理器
  2)NetThread::bind(绑定IP端口)然后Run起来处理网络包
  bind Adapter
  服务过程可能出现的异常情况
  + TC_EpollServer::Handle数据过载_pEpollServer->error(\"[Handle::handleOverload] adapter 队列最小超时时间3秒 :超时则调用ServantHandle::handleTimeout [TARS]ServantHandle::handleTimeout adapter 上报超时数目+NetThread::Connection::insertRecvQueue超过接受队列长度的一半,需要进行overload处理 新进包插入到接收队列前端接受队列满,需要丢弃
  ServantHandle处理网络请求线程
  Connection
  #recv(){span style=\"font-size: inherit;\
  运行流程图
  NetThread::processAccept()
  processAccept{   #是否到达配置的连接数上限   isLimitMaxConnection   #设置非阻塞模式   #禁止Nagle算法    # 添加新连接   addTcpConnection}
  6)_epollServer-startHandle
  新版本性能优化相关
  + 网络线程的内存池配置 * 该网络线程的内存池所负责分配的最小字节和最大字节(2的幂向上取整)   */        size_t                         _poolMinBlockSize; 1KB        size_t                         _poolMaxBlockSize; 8MB
    initialize
  异常处理
  处理新进包
  HandleGroup * 按name对handle分组,     * 每组handle处理一个或多个Adapter消息     * 每个handle对象一个线程
  NetServer
  launch(){    # 启动业务处理handle线程HandlePtr   &handle = vHandles[i];  #注册epoll侦听事件:ET_LISTEN#启动server-net线程开始处理epoll事件}
  +setProtocolName 设置协议类型+setProtocol(AppProtocol::parse)设置协议解析函数+setHandleGroupName(\"AdminAdapter\
  Application服务的基类
  _epoller.add
  6)承接6dispatch处理业务逻辑
  BindAdapter
  insertHandleQueue{  判断该消息包是否需要hash,放到handle的线程安全收包队列中,然后由handle的run函数去处理业务包}
  TC_Epollerepoller操作类,默认采用了EPOLLET方式触发 
  MFW网络处理
  创建新连接
  Application::main
   initializeClient(); initializeServer();_netServer->launch();
  7waitForShutdown:_netThreads[i]-start()
  CEpoller
  CEpoller::add 注册fd关注读写事件
  Handle定义服务逻辑处理的接口
  +handleImp{  handle(stRecvData)纯虚函数,由ServantHandle继承}+run{   initialize   handle(stRecvData)}
  NetThread::addTcpConnection
  处理新进连接
  NetThread::run()
  run(){    case ET_NET:      processNet(ev);      break;    case ET_NOTIFY:      processNotify();      break;    case ET_LISTEN:      processAccept(ev);      break;}
  1)_epollServer-bind
  5)setHandle(new handle)
   
 
 
 
 
  0 条评论
 下一页
 为你推荐
 查看更多
    
   
   
   
   
  
  
  
  
  
  
  
 