C++11重写muduo网络库3—Channel库(channel模块待补充完善)

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感兴趣的事件。

TcpServer.h

EventLoop.h

时间循环类,主要包含了两个大模块,一个是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)

此外还有其他的一些方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪睡的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值