muduo的事件分发器-Acceptor

  从对muduo的架构解析中我们知道,Acceptor主要是处理服务器的连接事件和事件分发。因为它要处理连接事件,因此muduo把它放在了独立于服务器的事件处理器池(eventloopthreadpool)之外的  一个eventloop中。


这里写图片描述

  其中 acceptSocket_是产生事件的socket文件描述符。而 acceptChannel是对acceptSocket的封装。因为事件不仅包含文件描述符,还包含对应这个事件的处理函数。因此需要把文件描述符和这些处理函数封装在一起,Channel结构体就是事件封装结构体。后面我们还会详细介绍一下Channel。
   *loop_就是运行Acceptor事件的eventloop,它也是muduo中必需的一个eventloop(因为eventloop线程池可能为空)。
   HandleRead()函数就是Acceptor连接事件的读处理函数,因为Acceptor只负责处理读事件,因此只对相应的Channel设置读事件处理函数。 HandleRead()函数的核心工作是由NewConnectionCallback函数完成。 NewConnectionCallback函数可以由用户通过调用 setNewConnectionCallback函数设置。这里的Acceptor用户一般是Tcpserver。
  Acceptor在处理连接事件之前,必需的准备工作在listen函数中完成。从该函数的源代码我们可以了解需要完成的预备动作:

void Acceptor::listen()
{
  loop_->assertInLoopThread(); 
  listenning_ = true;
  acceptSocket_.listen();//设置套接口的状态为listen
  //将acceptChannel_设置为可处理读事件的状态
  acceptChannel_.enableReading(); 
}

  后面介绍Channel时在具体介绍它的原理。
  以上基本上就是Acceptor的全部了,我们看一下Acceptor

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值