前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >muduo源码分析(一)-整体框架说明

muduo源码分析(一)-整体框架说明

原创
作者头像
路小饭
修改于 2019-03-11 02:30:26
修改于 2019-03-11 02:30:26
4.4K0
举报

muduo是chenshuo开源的一个基于reactor pattern的多线程网络库。同时他也写了一本关于此网络库的书《Linux多线程服务端编程:使用muduo C++网络库》,推荐阅读。

muduo部分的文章偏向笔者自己的整理,想了解更细节的东西可以找上面那本书出来看看

1 整体框架说明

muduo整体是按照回调函数方式编写的,这样虽然在调用的时候更方便,但对于初学者梳理逻辑来说就有点“绕”了。看“别人家”的网络库,抓住以下几点有利于快速理解代码:

  • 网络库是怎样bind、listen和accept的
  • epoll模型被封装成啥样了,是怎样调度读写事件的
  • accept描述符是怎样被注册到epoll模型中的

  • muduo中有一个EventLoop总体负责绑定和监听端口,EventLoop调用Acceptor中函数完成bind、listen、accept操作
  • epoll模型的操作也被封装在了EventLoop中,EventLoop中loop方法中完成对epoll模型的调度
  • epoll对读写事件的操作封装在了Channel类中
  • accept描述符注册到epoll中是通过Channel中的enableReading进行的

上图中也能看出网络库的整体处理逻辑:

  • 有个EventLoop(图中的左上角)负责接收外界的请求,把成功建立的连接(TcpConnection)分配到EventLoopThreadPool中具体的EventLoop中(图中的EventLoop1、EventLoop2、EventLoop3等)

2 分阶段解析

先上图:(看不清楚可右键--在新标签页中打开图片)

1号虚线框

1号虚线框干了两件事儿,一是完成的描述符的创建和bind操作;二是注册了回调函数。

注意:

紫色的ConnectionCallback在3号虚线框中用到;红色的MessageCallback在4号虚线框中用到;蓝色的TcpServer::newConnection在3号虚线框中用到;橙色的Acceptor::handleRead在3号虚线框中用到(请原谅我的颜色描述能力。。。)

ConnectionCallback和MessageCallback是暴露给外界使用的。ConnectionCallback在请求成功(::accept)后调用;MessageCallback在处理具体请求时调用

  • net库对外封装为TcpServer类,提供了两个可供外界实现的回调函数接口:ConnectionCallback和MessageCallback
  • 在TcpServer的构造函数中初始化了Acceptor和EventLoopThreadPool
  • Acceptor中创建了socket同时进行了bind;将socket放在了acceptChannel中,在acceptChannel中注册了Acceptor::handleRead函数;绑定了TcpServer::newConnection函数

2号虚线框

2号虚线框也干了两件事儿,一是完成socket的listen操作,二是将socket注册到epoll模型中

  • TcpServer通过start函数调用了EventLoop的runLoop方法
  • runLoop中执行了Acceptor::listen函数,在此函数中完成了socket的listen操作和注册到epoll模型的操作

3号虚线框

2号虚线框已经把listen的socket注册到epoll中,当有客户端连接请求时会触发epoll模型。3号虚线框描述的就是此时的操作。3号虚线框把accept成功的socket放到了TcpConnection中,并按照轮询方式把TcpConnection的socket注册到不同的EventLoop中

  • 当有客户端发起链接时,触发acceptChannel_中注册的Acceptor::handleRead函数,而Acceptor::handleRead中继续调用了Acceptor中注册的TcpServer::newConnection
  • 在TcpServer::newConnection中,进行了socket的accept操作,并生成了新的TcpConnection
  • 后续再runInLoop中调用了TcpConnection::connectEstablished方法,将socket注册到EventLoopThreadPool中的EventLoop中,并调用了在TcpServer中注册的ConnectionCallback函数

4号虚线框

4号虚线框epoll模型开始等待外界发送请求,这时会触发channel_的handRead方法,在handRead中读取了请求,然后调用了TcpServer中注册的messageCallback_方法。

messageCallback_方法中不仅包含处理请求的逻辑,还必须考虑怎样返回结果,其中一种可选方式是调用TcpConnection的send方法发送结果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS App的打包和上架流程
注册时填写的主要信息:姓氏、名字、国家、出生日期、邮箱、密码、密码保护问题、图片验证码,邮箱验证码。注意填写的内容必须为全英文,不得出现中文。
iOS Magician
2023/10/11
1.3K1
iOS App的打包和上架流程
基础篇-申请开发者账号
我思故我在,下面就总结下我对 iOS开发者账号的申请中所认为的关键点和所以然,而不单单是网上那些方法步骤哦。 苹果开发者账号分三种。
進无尽
2018/09/12
1.9K0
基础篇-申请开发者账号
(DUNS)申请流程
1.首先需要选择国家 2.Legal Entity Name:公司的英文全称 3.Tradestyle or DBA:不用填 4.公司总部地址 Street Address街道详细地址 CIty/Town 市或者区 State/Province直辖市或者省 Postal Code邮编 Phone Number(公司的固话+86-区号-电话号)
达达前端
2020/11/24
2.2K0
(DUNS)申请流程
如何申请苹果开发者公司账号
1.一张VISA卡或者万事达信用卡,用于支付苹果开发者账号费用(99美元/每年)。请勿通过淘宝代办或者淘宝代付,苹果会认为这是黑卡行为并封禁账号。
iOS Magician
2023/03/21
3K0
如何申请苹果开发者公司账号
uniapp开发App从开发到上架全过程
​当我们的APP开发完毕,最终交付的时候,必然要经历的一个环节,就是APP上架,国内APP上架一般为IOS端appstore上架,安卓端应用商店比较多,最常见的应用商店有华为应用商店、小米应用商店、OPPO应用商店、VIVO应用商店、应用宝应用商店等。
iOS Magician
2023/11/30
5550
uniapp开发App从开发到上架全过程
iOS 最新 APP提交上架流程~(打包 ipa)
随着苹果2020年对开发者账号申请流程变更,2020年之前的申请开发者账号流程已经成为过去时,现在需要一条新的流程,接住苹果《开发者》APP申请。
iOS Magician
2023/03/22
3600
iOS 最新 APP提交上架流程~(打包 ipa)
苹果开发者证书申请流程
Apple账户,也就是AppleId,使用苹果设备的人手一个,没有就去注册一个;必要信息如实填写即可;
iOS Magician
2023/03/22
7830
HBuilderX: Android 自定义渠道包
当完成提交,您将会得到一个 Emrollment ID ,届时请耐心等待。我们将会用电话或电子邮件和您联系
达达前端
2020/11/26
3880
HBuilderX: Android 自定义渠道包
iOS | 申请开发者组织账号
iOS 的开发者账号分为两大类:Apple Developer Program 和 Apple Developer Enterprise Program 。
CnPeng
2022/11/07
3.5K0
iOS | 申请开发者组织账号
第一次申请苹果的公司开发者账号
先注册一个苹果的apple id,申请appleid的地址:https://appleid.apple.com/account
达达前端
2020/11/24
1.6K0
第一次申请苹果的公司开发者账号
苹果企业版帐号申请记录
企业帐号比个人版的申请麻烦而且申请时间比较长, 做个记录免得忘记. 申请帮助见官网: https://developer.apple.com/support/ios/enrollment.php 客服电话:400 670 1855    重要, 有不懂得就问. 客服态度赞.   打电话人多经常挤不进去, 建议9点左右打, 或者中午的时候. 1 2014-09-01  AppleID准备. 1.1 准备一个AppleID, 经400电话确认, 如果该AppleID已作为个人开发ID, 不能再用于企业ID申请.
FlyLolo
2018/05/17
1.9K0
苹果认证MFI学习
MFi包含一系列技术或标准,你所开发的配件,要符合这个标准,才能够苹果设备如手机所认可,才能得到授权在市场销售。
天天Lotay
2023/03/01
3.7K0
苹果认证MFI学习
如何在IOS上发布APP详细教程
企业相关文字信息(英文):包括名称、注册地址、固定电话、网址、统一社会信用代码、营业执照扫描件等。
iOS程序应用
2023/04/13
9800
App Store上架iOS App的详细流程
登录苹果开发者官网Apple Developer, 点击顶部的Support,点击membership,点击enrollment,最后点击Enrollment的Learn more about these programs链接进入Apple Developer Program - Apple Developer, 打开这个界面后,点击右上角的Enroll按钮,滚动到最底部,点击Start Your Enrollment开始申请:
iOS Magician
2023/03/22
1.6K0
上架App Store的整体流程
App Store上架指的是iOS应用从提交申请到上线的整个过程,它的目的是让应用展示在App Store上获取流量、用户。
匿名_
2019/07/03
2K0
上架App Store的整体流程
APP上架需要的准备和流程
(1) 个人账号(Individual):费用99美金一年, 该账号在App Store销售者只能显示个人的ID,比如zhitian zhang,单人使用。个人账号只能有一个开发者。100个苹果的iOS设备UDID测试。​
iOS程序应用
2022/12/06
1.6K0
【02】微信支付商户申请下户到配置完整流程-微信开放平台申请APP应用-微信商户支付绑定appid-公众号和小程序分别申请appid-申请+配置完整流程-优雅草
微信商户支付绑定appid由于我们没有这个,我们的支付应用场景在APP,因此我们需要登录微信开发平台,如果我们场景是小程序,公众号那么也就对应去小程序和公众号申请。
卓伊凡
2025/02/28
7960
iOS-app证书配置和发布流程详解
前些天,由自己独立开发的两款App提交到Appstore了,并且通过审核了,特此记录一下关于app证书配置和发布流程的介绍,希望对有需要的同学有所帮助! 一、 简单科普 苹果开发者中心网站 开发者帐号的类型: 个人-$99(约688元/年)(调试证书最多只能有两个) 公司-$99(约688元/年)需要提供邓白氏编码,用于企业认证,可以进行团队开发管理 企业-$299,需要提供邓白氏编码,程序不能上架到AppStore(用于企业内部办公软件等)(调试证书最多有五个) 二、创建证书 点击“证书、标识符、文件”
用户1890628
2018/05/10
1.9K0
移动直播平台开发完成后的注意事项
对于很多从事直播平台运营的朋友来讲,在移动直播平台开发时,就会事先了解应用上架相关的问题。开发直播平台的技术门槛降低了,但随着国家对于直播行业的监管力度加强,很多应用市场为响应国家相关政策,对直播平台的上架也有了更为严格的要求。
云豹通讯员
2020/02/11
1.3K0
iOS应用上架详细图文教程
App Store作为苹果官方的应用商店,审核严格周期长一直让用户头疼不已,很多app都“死”在了审核这一关,那我们就要放弃iOS用户了吗?当然不是!本期我们从iOS app上架流程开始梳理,详细了解下iOS app上架的那些事。
爱学iOS的小麦子
2023/06/02
9570
相关推荐
iOS App的打包和上架流程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档