去年看muduo网络库时没有总结博文,导致前段时间用muduo时发现好多东西都模模糊糊,于是就花时间又一次翻阅了muduo源码,并用此篇博文记录下其网络库整体脉络,以便是后来者入手起来更方便,同时也可用作自己以后复习的资料
1.如何入手muduo库
其实在这之前也没有尝试去分析一个网络库的总脉络,更没有去尝试把它以博文的形式总结下来。那么我们该如何尝试去分析这样一个网络库的整体脉络呢?其实我有想过将muduo/net中的每一个功能类详细的一一介绍,但是后来我感觉没必要,这样只会让初学者更加找不着北。基于此种情况,我打算从muduo库提供给用户最外层的TcpServer类入手,然后由外到内的道出其整体脉络
2.由外到内分析muduo
(1)TcpServer类
muduo库为用户提供了一个TcpServer类(定义在TcpServer.h中),该类就是用来生成整个muduo网络库架构的原始类。用户只需要创建一个该类的对象,那么一个搭载这整个muduo网络库的网络架构就形成了。要揭开该类的神秘面纱,那就先来看看它的数据成员
TcpServer类数据成员
typedef std::map<string, TcpConnectionPtr> ConnectionMap;
EventLoop* loop_;
const string ipPort_;
const string name_;
boost::scoped_ptr<Acceptor> acceptor_;
boost::shared_ptr<EventLoopThreadPool> threadPool_;
ConnectionCallback connectionCallback_;
MessageCallback messageCallback_;
WriteCompleteCallback writeCompleteCallback_;
ThreadInitCallback threadInitCallback_;
AtomicInt32 started_;
int nextConnId_;
ConnectionMap connections_;
在介绍其数据成员之前得先为读者介绍muduo库中对几种网络“组件”的抽象
(1)TcpConnection:该类是对网络中各个TCP套接字连接的抽象
(2)EventLoop:该类算是对网络中I/O复用的整个流程块的抽象
(3)Acceptor:该类是对连接处理的一个抽象
(4)EventLoopThreadPool:该类是对多线程搭载多个EventLoop的抽象
好了介绍完上面那几个抽象类,我们在回过头来看TcpServer类的数据成员就会清楚明白很多,本篇博文中在介绍每个类的数据成员时我都不会也不可能做到细无巨细,所以我只会挑最重要的来介绍
在介绍之前请读者先在自己脑海中想象一下,如果让你实现一个TcpServer类,并通过该类直接就可以创建一个网络服务器的网络架构。那么该类中