muduo源码分析——整体架构

 最近在学习网络编程,从flamingo这个服务器开始,当然这个服务器也是基于muduo开发的,所以也算是在研究muduo吧。
以前也有记录的习惯,在ipages上或者写在本子上,不过还是记录在博客上吧,一来可以分享自己的心得,二来备查也方便,再者有任何的理解偏差,也会有网友指正吧。

 之前也看过不少muduo的分析,这次决定按照自己的理解来写博客,或许会有偏差,希望大家能帮我指出来,谢谢!

 先从整体结构入手吧。

!!!注意,muduo大量使用了回调函数,所以会让人很晕,因为顺序和人阅读代码的顺序会相反,比如说来了一个新的连接,代码的顺序是epoll发现了,然后调用Channel内的函数,然后调用了对应的Acceptor的函数…
但是初始化的时候,是Acceptor对应有一个成员是Channel,这个成员Channel绑定了它的拥有者的回调函数。顺序是相反的,所以在阅读的时候会有一点晕,这一点需要注意,理清这一点,阅读代码会比较舒服。

整体结构

 muduo核心的几个类有TcpServer、TcpConnection、Acceptor、Channel、Eventloop、EventLoopThread、EventLoopThreadPool。

 关于socket操作等,或者说跟操作系统比较接近的有sockets、InetAddress。还有个epoller,那么在muduo中是poller,但是在我看的flamingo中用了epoller,这个无所谓拉。

 另外还有缓存设计buffer。

muduo 对外提供的接口

  也看过一些别的博客的文章,然后自己在看代码的时候也发现了,muduo提供了TcpServer作为服务器或者叫主线程吧的接口,然后提供了TcpConnect作为每个连接的服务接口,其中通过大量的回调函数来供用户代码调用。

TcpServer初始化工作

简单做了个思维导图
muduo源码分析——整体架构_第1张图片
 从上图可以看出TcpServer的初始化后,是如何创建其他相应的类的。
简答来说一个TcpServer包含一个EventLoopThreadPool对象,一个EventLoopThreadPool对象管理若干个EventLoop(EventLoopThread和EventLoop一一对应)。

 当然TcpServer对象还包含一个Acceptor对象,这个对象用于接收新连接并拥有一个Channel对象。


epoll->读事件

muduo源码分析——整体架构_第2张图片
每一个连接,都会有一个Channel和一个TcpConnection,每个TcpConnection都有一个输出buffer和一个输入buffer。
上述调用均是以回调的形式进行的。

写数据

在这里插入图片描述

大致整体是这个样子,接下来我会对muduo进行详细的分析。

你可能感兴趣的:(c++网络编程,muduo,网络编程)