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就可以正常收发了。
muduo学习简单介绍相关推荐
- c 语言重载参数类型不同重载和,C++基础学习之函数重载的简单介绍
前言 我们在平时写代码中会用到几个函数但是他们的实现功能相同,但是有些细节却不同.例如:交换两个数的值其中包括(int, float,char,double)这些个类型.在C语言中我们是利用不同的函数 ...
- [深度学习-原理]GAN(生成对抗网络)的简单介绍
系列文章目录 深度学习GAN(一)之简单介绍 深度学习GAN(二)之DCGAN基于CIFAR10数据集的例子 深度学习GAN(三)之DCGAN基于手写体Mnist数据集的例子 深度学习GAN(四)之c ...
- 【贪玩巴斯】Unity3D初学圣经(一)——学习要求 Unity简单介绍 游戏引擎介绍 课程体系介绍 「1-1 到 1-4 」—— 2021年12月9日
Unity3D初学圣经 一 --学习要求 & Unity简单介绍 & 游戏引擎介绍 & 课程体系介绍 本文对应视频P1 1-1 到P2 1-4 1.学习要求 2.Unity简单 ...
- python学习笔记(一)Python 简单介绍
Python学习笔记(一)Python 简单介绍 Python介绍 Python简介 Python应用领域 Python是解释型的语⾔ 编译和解释的区别是什么? 编译型vs解释型 编译型 解释型 Py ...
- Zemax学习笔记(1)- 界面与功能的简单介绍
Zemax学习笔记(1)- 界面与功能的简单介绍 OpticStudio入门-第1部分 界面与功能的简单介绍 OpticStudio入门-第1部分 获取Zemax 2019可以在在淘宝上购买,商家会给 ...
- 【学习记录】Inception结构的简单介绍及Filter Concatenation的理解
文章目录 [学习记录]Inception结构的简单介绍及Filter Concatenation的理解 Inception Filter Concatenation [学习记录]Inception结构 ...
- React学习-event.preventDefault()方法的简单介绍
React学习-event.preventDefault()方法的简单介绍 react官方文档中有这么一段: 在 React 中另一个不同点是你不能通过返回 false 的方式阻止默认行为.你必须显式 ...
- 流形学习(Manifold Learning)简单介绍
传统的机器学习方法中,数据点和数据点之间的距离和映射函数f都是定义在欧式空间中的,然而在实际情况中,这些数据点可能不是分布在欧式空间中的,因此传统欧式空间的度量难以用于真实世界的非线性数据,从而需要对 ...
- IOS学习之 网络编程(10)--简单介绍ASI框架的使用
转载自 http://www.cnblogs.com/wendingding/p/3950027.html 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是A ...
最新文章
- Linux简介(一)
- 前端模块化,AMD与CMD的区别
- linux elf 文件查看工具 readelf
- ML之FE:利用FE特征工程(单个特征及其与标签关系的可视化)对RentListingInquries(Kaggle竞赛)数据集实现房屋感兴趣程度的多分类预测
- tensorflow object detection API训练公开数据集Oxford-IIIT Pets Dataset
- 001Python路--入门
- flink实时机器学习-alink在线机器学习remote模式贝叶斯建模实验记录
- 注册表使用次数修改_如何使用系统注册表编辑器来优化电脑系统
- Qt元对象和属性机制
- Cisco路由器安全配置方案
- 【面试必备】CSS盒模型的点点滴滴
- 恢复mysql数据--使用frm和ibd文件
- Cplex20.1版本bin包Linux安装过程
- 关于奥威亚自动录播系统的设置使用小笔记
- 2021年中式烹调师(中级)试题及解析及中式烹调师(中级)模拟试题
- android 电池监测工具,Battery Monitor Widget Pro(电池监测器)
- kettle的下载、安装和初步使用(windows平台下)(图文详解)
- OceanBase | OBCA认证考试
- bootstarp项目报告
- 盘点30种磁芯结构图汇总
热门文章
- 直面互联客户体验的新现实
- 干货 | 记一次跨域配置引发的思考
- 售后服务管理系统,公司可以轻松地在全国范围内实现联网维修服务
- 理解js中的面向对象
- 探索职业:如何用英语询问别人的职业
- Useful Things To Know About Machine Learning (机器学习中一些有用的知识)
- .bmp图片的文件头解析
- ARMV4,ARMV4T,ARMV4I, ARMv5te,armv6,ARM VFP,ARM neon
- Reflections反射扫描库
- 利用tomcat服务器,数据库,jsp,html实现用户注册