多个io管理----reactor(反应堆)
reactor的封装
流程:初始化服务器获得监听fd,初始化反应堆,反应堆中创建epoll树和io事件集合,把listen的fd添加到监听回调函数,有事件就调用accept回调函数,在accept回调函数中先accept,再设置事件即把对应io变成一个事件(读或者写)并对其设置回调函数为读事件(先调用recv是因为客户端先发给服务器的),再添加进epoll树,如果调用了recv回调函数,再在recv回调函数中调用recv函数,再删除节点,并更新set为send回调函数,并添加进epoll树上,启动反应堆函数,函数中取出epoll树等待的事件,遍历,如果返回的是可读,调用对应节点事件ev的回调函数callback,因为之前set过了对应的回调函数是什么,所以直接调用即可
前提
每一个io对应的事件存了什么
reactor的内部
fd转化为事件
fd可能是读也可能是写,这里把读和写分离操作,设置不同回调函数
epoll节点的添加和删除
读回调函数
写回调函数
接受连接回调函数
初始化服务器
初始化reactor和销毁
设置listen函数
reactor运行函数
main函数
单台服务器百万并发
同一个进程监听多个端口