muduo学习简单介绍

介绍

muduo 网络库,是陈硕大神发布在github上的一个c++项目。几乎没有引用第三方库,手动封装了系统api,非常适合不希望仅仅成为简单api调用员的programmer学习。使用cmake编译,同时可以顺便掌握cmake使用。总之我非常推荐后端程序员可以学习一下,尤其是c++程序员,无论是对底层的了解,还是代码规范都有很大程度上的促进作用。(不得不佩服大神的代码确实足够严谨)

如何学习muduo网络库

对于开源项目学习,我个人观点是:
1)首先看懂项目是如何编译的
2) 然后确定文件目录,大概是做什么的(实在没法确定,就带着疑问看代码)
3) 不要死扣细节,先看懂代码执行的流程
4) 最后再细致的看代码(阅读转化率不高的话,个人建议可以手敲一下)

muduo代码结构介绍

muduo/base : 该目录下的是和和网络逻辑无关的文件,封装了日志,线程,锁,条件变量的类等
muduo/net : 该目录下封装了网络相关,以及事件循环相关的类,也是muduo库的核心代码

muduo库核心类简述

muduo 最核心的实际就两个类,一个是EventLoop类(和boost库中的ioservice功能类似),另一个是TcpServer类。

任务循环逻辑简述

事件循环类EventLoop, 将任务分为两种,一种是io任务(诸如网络socket,定时器等),另一种是普通函数任务。io任务通过poller(封装poll,epoll)进行监视,poller和EventLoop之间的交互通过Channel进行,如添加io任务时,将回调以及fd设置到channel中,通过channel方法将fd添加到poller的监视集合中;poller返回时,eventloop,处理事件触发的channel的io回调任务,然后执行普通函数任务。

网络逻辑简述

TcpServer 构造,创建Acceptor类,Acceptor调用系统api获取scoket_fd用于构造socket类。TcpServer通过Acceptor的listen方法完成将socket_fd到eventloop中poller的添加,以及赋予socket_fd listen能力。当poller监测到socket_fd有read事件时,调用系统api accept获取一个fd1(该fd1用于和远端交互),执行channel(包裹socket_fd(该socket_fd)中的TcpServer::newconnection回调,利用fd1创建TcpConnection对象,将该对象添加到TcpServer的connectionMap中,然后设置connection的read回调,write回调,close回调,然后添加一个普通函数任务到eventloop中(添加connection 的fd1到poller监视集合中中),至此connection就可以正常收发了。

上一篇:【从小白开始学python系列八】数值类型


下一篇:muduo网络库简介和编程示例