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
- muduo源码分析--事件如何被关注的 EpollPoller Channel TcpServer
- muduo源码分析--事件回调层次是怎么传递的Tcpserver Channel TcpConnection
- muduo源码分析--TcpServer
- muduo源码分析之事件处理器-Channel
- muduo源码分析之TcpServer
- muduo源码分析之多线程TcpServer
- muduo库的EpollPoller剖析
- muduo::Acceptor、TcpServer分析
- muduo源码分析之EventLoop、Channel、Poller的实现
- Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)
- Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)
- muduo:Channel、Poller分析
- EpollPoller --- muduo_net库源码分析(27)
- muduo : TcpServer
- Muduo网络库源码分析(五)Acceptor和TcpServer类
- Muduo之Channel源码解析
- muduo库的TcpServer和TcpConnection用法
- muduo源码分析--我对muduo的理解
- jquery随机多彩tag标签随机颜色和字号大小效果
- Unknown symbol platform_driver_unregister (err 0)
- ORA-32773: operation not supported for smallfile tablespace
- Android/linux(earlysuspend、lateresume)睡眠唤醒机制简介
- 黑马程序员_我的交通灯管理系统
- muduo源码分析--事件如何被关注的 EpollPoller Channel TcpServer
- hdu 2795 Billboard 线段树
- 查看当前环境下内核导出了哪些符号
- 数据结构排序之直接插入排序
- Dijkstr 最短路径算法
- response.setHeader("Refresh", "2;url=http://www.baidu.com");
- C#编程之基础总结(一)
- 网络数据包封装过程
- 黑马程序员_我的银行业务系统