现在暂时记住TcpConnection是TcpServer中Acceptor关注的监听套接字上accept新连接后被初始化的一个对象,接下来分析下EventLoop
这个东西才是真正驱动库的核心,是别的类(EpollPoller Acceptor )帮助他完成了库的功能,看看内部是怎么实现的。
EventLoop:
这个类中最重要的成员就是poller_,这个成员调用epoll_wait监听这个EventLoop所关注的所有套接字,poller_在这里的作用就是:当其返回时,activeChannel_内是所有有事件的Channel,然后就调用Channel中的handleEvent()即可。
而updateChannel和removeChannel就是和向EventList(这个成员在poller_中)添加删除某一个Channel(虽说Channel不拥有socketfd,但是Channel和某个特定的socketfd进行绑定)。
内部还有一个wakeupFd_,这是为了异步唤醒而存在的socketfd,线程间同行可以使用eventfd产生的socketfd,wakeupFd_就是这样的套接字(想下muduo的默认模型就明白这个套接字存在的意义了)。与这个套接字相关联的Channel就是wakeupChannel_。
其他也有和Timer相关的函数和成员变量,这里暂时不分析。
还有几个重要的标志位: