最近在学习网络编程,从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。</