TcpServer类是muduo给用户提供编写服务器程序的入口,包含了很多有关服务器编程的东西,把Reactor模型的反应堆、事件分发器、事件回调都打包在里边,用户在使用时无需关注其内部的实现,只需提供具体的事件和回调,专心做自己的业务。
TcpServer成员总览:

看TcpServer里的成员就可以大概知道它都在维护些什么,第一个成员loop_事件循环就可以知道跟多路分发器有关,ipPort_是服务器对象的IP端口,name_是服务器的名字,用来监听新连接的acceptor_,线程池对象threadPool_,事件回调函数、维护多线程下防止服务器重复开启的started_…
再来看同样也很重要的事件循环类EventLoop的成员:

事件循环类对应的就是我们的IO复用对象,我们可以把它想象成epoll_wait,其中的成员poller_是poll和epoll对象的抽象,抽象出了他们具体的事件分发操作。把它想象成epoll_wait,里边除了epoll对象就应该有监听的socket和感兴趣的事件,而这些监听的socket被封装成了Channel,放在currentActiveChannel_成员里。EventLoop里最重要的两个成员就是他们了。
EPollPoller的成员:

channel的成员:

可以看到里面都有我们分析中所包含的信息。
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;