介绍

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

muduo学习简单介绍相关推荐

  1. c 语言重载参数类型不同重载和,C++基础学习之函数重载的简单介绍

    前言 我们在平时写代码中会用到几个函数但是他们的实现功能相同,但是有些细节却不同.例如:交换两个数的值其中包括(int, float,char,double)这些个类型.在C语言中我们是利用不同的函数 ...

  2. [深度学习-原理]GAN(生成对抗网络)的简单介绍

    系列文章目录 深度学习GAN(一)之简单介绍 深度学习GAN(二)之DCGAN基于CIFAR10数据集的例子 深度学习GAN(三)之DCGAN基于手写体Mnist数据集的例子 深度学习GAN(四)之c ...

  3. 【贪玩巴斯】Unity3D初学圣经(一)——学习要求 Unity简单介绍 游戏引擎介绍 课程体系介绍 「1-1 到 1-4 」—— 2021年12月9日

    Unity3D初学圣经 一 --学习要求 & Unity简单介绍 & 游戏引擎介绍 & 课程体系介绍 本文对应视频P1 1-1 到P2 1-4 1.学习要求 2.Unity简单 ...

  4. python学习笔记(一)Python 简单介绍

    Python学习笔记(一)Python 简单介绍 Python介绍 Python简介 Python应用领域 Python是解释型的语⾔ 编译和解释的区别是什么? 编译型vs解释型 编译型 解释型 Py ...

  5. Zemax学习笔记(1)- 界面与功能的简单介绍

    Zemax学习笔记(1)- 界面与功能的简单介绍 OpticStudio入门-第1部分 界面与功能的简单介绍 OpticStudio入门-第1部分 获取Zemax 2019可以在在淘宝上购买,商家会给 ...

  6. 【学习记录】Inception结构的简单介绍及Filter Concatenation的理解

    文章目录 [学习记录]Inception结构的简单介绍及Filter Concatenation的理解 Inception Filter Concatenation [学习记录]Inception结构 ...

  7. React学习-event.preventDefault()方法的简单介绍

    React学习-event.preventDefault()方法的简单介绍 react官方文档中有这么一段: 在 React 中另一个不同点是你不能通过返回 false 的方式阻止默认行为.你必须显式 ...

  8. 流形学习(Manifold Learning)简单介绍

    传统的机器学习方法中,数据点和数据点之间的距离和映射函数f都是定义在欧式空间中的,然而在实际情况中,这些数据点可能不是分布在欧式空间中的,因此传统欧式空间的度量难以用于真实世界的非线性数据,从而需要对 ...

  9. IOS学习之 网络编程(10)--简单介绍ASI框架的使用

    转载自 http://www.cnblogs.com/wendingding/p/3950027.html 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是A ...

最新文章

  1. Linux简介(一)
  2. 前端模块化,AMD与CMD的区别
  3. linux elf 文件查看工具 readelf
  4. ML之FE:利用FE特征工程(单个特征及其与标签关系的可视化)对RentListingInquries(Kaggle竞赛)数据集实现房屋感兴趣程度的多分类预测
  5. tensorflow object detection API训练公开数据集Oxford-IIIT Pets Dataset
  6. 001Python路--入门
  7. flink实时机器学习-alink在线机器学习remote模式贝叶斯建模实验记录
  8. 注册表使用次数修改_如何使用系统注册表编辑器来优化电脑系统
  9. Qt元对象和属性机制
  10. Cisco路由器安全配置方案
  11. 【面试必备】CSS盒模型的点点滴滴
  12. 恢复mysql数据--使用frm和ibd文件
  13. Cplex20.1版本bin包Linux安装过程
  14. 关于奥威亚自动录播系统的设置使用小笔记
  15. 2021年中式烹调师(中级)试题及解析及中式烹调师(中级)模拟试题
  16. android 电池监测工具,Battery Monitor Widget Pro(电池监测器)
  17. kettle的下载、安装和初步使用(windows平台下)(图文详解)
  18. OceanBase | OBCA认证考试
  19. bootstarp项目报告
  20. 盘点30种磁芯结构图汇总

热门文章

  1. 直面互联客户体验的新现实
  2. 干货 | 记一次跨域配置引发的思考
  3. 售后服务管理系统,公司可以轻松地在全国范围内实现联网维修服务
  4. 理解js中的面向对象
  5. 探索职业:如何用英语询问别人的职业
  6. Useful Things To Know About Machine Learning (机器学习中一些有用的知识)
  7. .bmp图片的文件头解析
  8. ARMV4,ARMV4T,ARMV4I, ARMv5te,armv6,ARM VFP,ARM neon
  9. Reflections反射扫描库
  10. 利用tomcat服务器,数据库,jsp,html实现用户注册