Reactor 是啥
-
Reactor是一种事件驱动的设计模式
基本构成
-
事件循环
-
顾名思义,就是一个循环,是其核心部分;保证持续的监听多个事件源是否有事件发生;例如:是否有网络请求、是否有可读数据
-
-
事件分发
-
与事件循环紧密配合,当有事件发生时,将事件分发给对应的事件处理器
-
-
事件处理
-
针对不同类型的事件,有对应的事件处理,Reactor根据事件类型将事件分发给相应的事件处理器,执行相应的操作,如读取数据、解析请求...
-
模式架构
-
单线程 Reactor
-
Reactor 线程既负责事件分发,也执行事件处理
-
-
多线程 Reactor
-
Reactor 线程负责事件监听和分发,工作线程池执行事件处理
-
-
多 Reactor
-
主 Reactor 负责监听新的连接,子 Reactor 负责监听事件并处理
-
代码实现示例

首先总览一下这个 CReactor 类:
-
事件循环 eventLoop() 循环监听处理事件
-
m_mainCEpoll 采用 Epoll 机制监听多个事件源,并返回触发事件
-
registerHandler、removeHandler、modifyHandler负责事件源的增删改
此类对 Reactor 的三中模式都有实现,所以拥有线程池与从Reactor

定义了一个枚举,可直接选择当前想用的模式

再看看事件处理器部分:
-
首先是定义了 CHandler 的接口类
-
然后 监听器CAcceptor、处理器CClientHandler 继承CHandler后分别重载对应事件的处理

-
当 Reactor单例 被构造时,会将
m_Acceptor监听器加入主Reactor对应的m_mainCEpoll中 -
其次会构造好
m_threadPool线程池,以便单Reactor多线程、多Reactor模式使用 -
如果是 多Reactor模式,就让线程池运行
从Reactor的事件循环

事件循环部分:
-
Epoll 循环监听,并返回就绪事件
-
单Reactor单线程、多Reactor多线程,这两个模式都只需在
事件循环所在的线程中处理就行 -
而 单Reactor多线程 则是将事件交给线程池处理

单线程处理与多线程处理的部分:
-
逻辑都是根据触发事件调用对应的处理器函数
-
区别是单线程就在当前线程处理,多线程就分发给线程池处理
606

被折叠的 条评论
为什么被折叠?



