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就可以正常收发了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值