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

来源:互联网 发布:火影忍者网络错误 编辑:程序博客网 时间:2024/06/07 13:25
首先看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。这个是接下来详细分析的对象

1 0
原创粉丝点击