muduo源码分析--事件如何被关注的 EpollPoller Channel TcpServer

首先看TcpServer:
        在这里肯定是有socketfd的,不然这个监听套接字是怎么被关注的呢!这样的操作时通过Accept来处理的
Acceptor:
        在这个类就是提供给TcpServer让其监听的,类中有Channel,也有一个Socket,有一个事件handleRead(),这个函数肯定是提供给Channel的,等到Acceptor中的socketfd有事件时,肯定是可读事件,调用Channel的handlEvent,然后调用Acceptor的handleRead()函数
        那么newConnectionCallback_回调函数就是Acceptor的拥有者注册的,也就是TcpServer赋值的。
        那么这个Acceptor中的socketfd是怎么被EventLoop关注的呢!通过Channel中的enableReading()函数,这个函数将这个Chandel所关注的socketfd的事件标志位可读,然偶调用update(),这个函数最终将这个Channel中的socketfd添加到epfd关注的poll_event数组中

    上面已经将监听套接字添加到被关注数组中了,(假如怎么开始监听先不说)如果Acceptor中的socketfd可读,那么调用handleRead()函数,在Acceptor中首先accept接受新连接,新连接接受到,调用newConnectionCallback的回调,这个回调是怎么来的呢?谁拥有Acceptor谁就注册,那么就是TcpServer喽,TcpServer中的这个回调根据新接受到的套接字初始化了一个TcpConnection。
    Acceptor中的sockietfd每可读一次就回调一次TcpServer中的newConnectionCallback_,那么就新初始化一个TcpConnection。
        也就是说,TcpServer中新连接都被初始化一个TcpConnection,这么一来,TcpConnection就是网络库的核心部分了
        TcpConneciton是一个很关键的部分,这个类里面有关于套接字上所有回调(就算是handleRead() handleWrite() handleClose handleError()函数)

    这么一来,就知道TcpServer是怎么接受新连接的,接受到新的连接以后又是怎么处理的(详细的目前还不知道),得出结论,在TcpServer得到一个新的链接以后,形成TcpConnection。这个是接下来详细分析的对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值