• 速览muduo组成结构


    速览muduo组成结构

    TcpServer

    TcpServer类是muduo给用户提供编写服务器程序的入口,包含了很多有关服务器编程的东西,把Reactor模型的反应堆、事件分发器、事件回调都打包在里边,用户在使用时无需关注其内部的实现,只需提供具体的事件和回调,专心做自己的业务。
    TcpServer成员总览:
    在这里插入图片描述
    看TcpServer里的成员就可以大概知道它都在维护些什么,第一个成员loop_事件循环就可以知道跟多路分发器有关,ipPort_是服务器对象的IP端口,name_是服务器的名字,用来监听新连接的acceptor_,线程池对象threadPool_,事件回调函数、维护多线程下防止服务器重复开启的started_…

    EventLoop

    再来看同样也很重要的事件循环类EventLoop的成员:
    在这里插入图片描述
    事件循环类对应的就是我们的IO复用对象,我们可以把它想象成epoll_wait,其中的成员poller_是poll和epoll对象的抽象,抽象出了他们具体的事件分发操作。把它想象成epoll_wait,里边除了epoll对象就应该有监听的socket和感兴趣的事件,而这些监听的socket被封装成了Channel,放在currentActiveChannel_成员里。EventLoop里最重要的两个成员就是他们了。
    EPollPoller的成员:
    在这里插入图片描述
    channel的成员:
    在这里插入图片描述
    可以看到里面都有我们分析中所包含的信息。

    EventLoopThread和Acceptor

    one loop per thread是muduo的核心思想,loop有了,而thread和loop需要的原料从哪来呢?
    thread自然是从EventLoopThread来了,来看EventLoopThread的成员定义:
    在这里插入图片描述
    baseLoop_维护的是主循环,用来处理新连接的建立,并把创建的新连接分发给subReactor,numThreads_是用户设置开辟subReactor的数量,也就是线程的个数,next_维护下个到来的新连接要给哪个subReactor。

    原料connectionSocket来自于Acceptor,负责处理新连接,并把建立的connectionSocket分发给subReactor来维护。
    在这里插入图片描述
    从他的成员可以看到他有自己的loop,监听的acceptSocket,新连接回调,还有监听的状态。

    除此之外,还有打包了fd和关注事件、发生事件的Event事件channel;
    存储fd和channel的映射的多路分发器Poller和EPollPoller;
    事件循环Reactor反应堆EventLoop;
    Reactor初始化EventLoopThreadPool;
    体现one loop per thread模型的Thread和EventLoopThread;
    主要封装了listenfd相关的操作Acceptor;
    应用层缓冲区Buffer;
    封装了connfd状态和操作的TcpConnection;

  • 相关阅读:
    线性代数 --- 投影Projection 二(投影即分量)
    渗透测试神器Nmap使用教程
    Java-Day19 Java集合(集合框架、Collection接口、List接口及List接口实现类)
    rabbitmq怎么实现延迟消息队列?
    【前端验证】通关寄存器与ral_model —— 将寄存器描述由excel格式转为xml格式的脚本
    关于环境保护html网页设计完整版-4环保垃圾分类5页
    边缘计算盒子与云计算:谁更适合您的业务需求?
    电商运营怎么去学?如何打造爆品?
    X.509 V3证书的签发与验证
    JDK核心JAVA源码解析(8) - 自动封箱拆箱与效率的思考
  • 原文地址:https://blog.csdn.net/weixin_43973403/article/details/126149844