muduo源码分析--我对muduo的理解

分为几个模块 EventLoop、TcpServer、Acceptor、TcpConnection、Channel等

对于EventLoop来说:

他只关注里面的主驱动力,EventLoop中只关注poll,这类系统调用使得其成为Reactor模式,EventLoop中有属于这个loop的所有Channel,这个loop属于哪一个Server.

 

几个类存在的意义:

从应用层使用的角度来看,用户需要初始化一个EventLoop,然后初始化一个TcpServer(当然也可以自定义个TcpServer,自定义数据处理函数需要注册到TcpServer内),然后调用TcpServer的start函数,然后调用EventLoop的loop()函数。整个用户层的使用流程就是这样的!

从用户层的应用方法来解析Muduo库的设计思想:

首先来看TcpServer这个类,从名字来看,它是一个服务器,里面肯定需要有一个用于监听某个地址的套接字,这个是Acceptor类,这是由TcpServer引出的第一个类,在Acceptor类中封装了监听套接字,Acceptor负责了一个socketfd,这个socketfd就是一个监听套接字。当这个套接字上有可读事件时,调用了Acceptor的handleRead函数,此函数的内部就是accept()系统调用了,函数返回产生了一个连接套接字,紧接着就是调用Acceptor中的回调函数newConnectionCallback_,那么这个回调是谁注册的呢?肯定是谁拥有Acceptor谁就负责初始化Acceptor中的newConnectionCallback_回调喽!那么就是TcpServer负责注册!在进行TcpServer初始化时调用Acceptor中的setNewConnectionCallback()函数将newConnection赋值给newConnectionCallback_。也就是说,在Acceptor中一旦accept()系统调用成功返回就立马调用newConnection函数。

到目前为止,遗留下了以下几个问题:

1、  Acceptor中的handleRead()函数是什么时候被调用的!

2、  newConnecion虽说属于TcpServer,但是newConnection函数的作用是创建了一个类!这个类的作用也是举足轻重!

 

接下来介绍下由TcpServer引出的Acceptor类:

首先这个类是属于内部类。既然这个类是管理监听套接字的,那么这个监听套接字的生命周期就是由Acceptor类来管理。这个套接字在Acceptor就是Socket,同时也有一个EventLoop指针,表明这个Acceptor属于某一个EventLoop(因为Acceptor依赖于某一个TcpSever,同时TcpServe和EventLoop是有依赖关系的)。同时还有一个newConnectionCallback_函数,这个函数是在TcpServer初始化的时候被赋值的。Listening_表示当前这个监听套接字的状态,idleFd_是一个输出错误的描述符。这里还有一个新的类—Channel!这个类在整个库中起着桥接的作用,整个这个类将有些东西单独提取,是的其他各个类的功能更加单一,关于这个类的介绍不在这里,毕竟Acceptor类是一个内部类,如果这个一个庞大的类由内部类引出,显得不够重视!呵呵!这里暂时雪藏Channel类!

关于Acceptor类的接口,只有很少的三个:

其中一个是setNewConnectionCallback,由于Acceptor类属于TcpServer类,所以调用合格函数的肯定是属于Acceptor的所有者,也就是TcpServer类,这个函数在TcpServer的构造函数中被调用,将newConnectionCallback_函数赋值为newConnection,已经说过了,有点啰嗦了!呵呵!另外一个就是listen()函数,从感觉上来看,这个是使得Acceptor类中的acceptSocket_处于监听状态的函数,暂时记住这个函数,尤其是这个函数中的最后一句,这事欠下的有待解决的问题!

 

有待解决的问题:

1、  在Acceptor中的listen()函数中,属于Channel类中的enableReading()是干什么的?

2、  Acceptor的listen()何时被调用!

到此需要记住的几点:

监听套接字是单独的类Acceptor,是脱离TcpServer类存在的一个类!

同时TcpServer类中不包含任何一个套

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
muduo是一个基于Linux的C++网络库,它专注于高性能和可伸缩性。根据引用,muduo是在Linux操作系统上开发和编译的。因此,它不支持Windows操作系统。 muduo使用了一些Linux特定的系统调用和功能,如timerfd和eventfd,这些功能在Windows中是不可用的。另外,muduo使用了一些Linux特定的库和工具链,如g++编译器和CMake构建系统。 引用提到muduo适用于IA32(英特尔32位体系架构)、FreeBSD和Darwin操作系统,分别是基于Intel的32位架构、类UNIX操作系统和苹果的操作系统。Windows操作系统并不在这个列表中。 综上所述,由于muduo的特定设计和依赖于Linux操作系统的功能,Windows操作系统不支持muduo。如果你正在使用Windows系统,并且需要一个类似的网络库,你可以考虑其他适用于Windows的替代品,如Boost.Asio。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [muduo网络库:18---muduo简介之(muduo库的由来、编译安装、目录结构、代码结构、线程模型)](https://blog.csdn.net/qq_41453285/article/details/105104845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [muduo木铎学习(一)](https://blog.csdn.net/qq_36616692/article/details/88142811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值