TcpServer相当于是muduo库提供给外部编写服务器程序的入口的一个类,相当于一个大箱子,
把muduo库有关服务器的编程相关的东西,包括反应堆,事件分发器,事件回调都打包一块了。
eventloop事件循环相当于是一个epoll,管理
pooller相当于是epoll抽象的概念,用poller当做1个基类,在派生类中实现了poll和epoll
epoll里面还得需要监听socket
revents是具体的发生的事件
channel我们理解成通道,相当于就是fd和它所绑定的感兴趣的event,如EPOLLIN、EPOLLOUT 还绑定了epoller返回时fd上发生的事件(绑定)。
最后 eventloop包含channel,eventloop是事件循环,相当于事件分发器一样,包含了epoll,也就是poller,另外就是epoll感兴趣的fd,以及它对应的事件和最终发生的事件被muduo库封装成channel
这些事件最终要向poller注册,发生的事件由poller给channel通知,channel得到相应fd的事件通知 调用预置的回调操作
一个线程有一个eventloop,一个eventloop有一个poller,一个poller可以监听多个channel,每个channel属于1个eventloop,1个eventloop有很多channel,这就是多路。
channel包含了fd和fd感兴趣的事件。
时间循环类,主要包含了两个大模块,一个是channel,一个是epolller
Channel封装了socket和感兴趣的event(EPOLLIN、EPOLLOUT可读或者可写)
//
//几个具体的函数
//构造函数
Channel::Channel(EventLoop *loop, int fd)
//tie方法 弱智能指针指向
void Channel::tie(const std::shared_ptr<void> &obj)
//通过channel所属的EventLoop,调用poller的相应方法,注册fd的events事件
//本类里面有个EventLoop的对象指针loop_,调用它的方法updateChannel,将this当参数传递过去
void Channel::update() {loop_->updateChannel(this);}
//同update,调用其方法,传递过去
void Channel::remove(){loop_->removeChannel(this);}
//fd得到poller通知后处理事件
// 将弱智能指针提升为强智能指针,这里的lock不是加锁而是提升
//然后调用本类中的方法
//tie
void Channel::handleEvent(Timestamp receiveTime)
// 根据poller通知的channel发生的具体事件, 由channel负责调用具体的回调操作,读写错误关闭四个事件
//比如如果是写事件执行写回调函数
void handleEvent(Timestamp receiveTime)
此外还有其他的一些方法