• 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)
    

    此外还有其他的一些方法

  • 相关阅读:
    超级详细Spring AI+ChatGPT(java接入OpenAI大模型)
    http post协议实现简单的rpc协议,WireShark抓包分析
    Jmeter 自动化性能测试常见问题汇总
    功率放大器在超声导波中的应用有哪些
    设计模式之适配器模式
    Codeforces Round #812 (Div. 2)补题(A-E)
    ES6 入门教程 11 对象的新增方法 11.1 Object.is() & 11.2 Object.assign()
    边缘计算(一):EdgeNeXt,面向移动开发的CNN-Transformer混合架构
    互联网商业模式设计方案
    vue axios请求两种方式,出现401错误,需要添加config配置
  • 原文地址:https://blog.csdn.net/baidu_41553551/article/details/126934235