1.Reactor模式
1.1.Reactor模式的定义
Reactor反应器模式,也叫做分发者模式或通知者模式,是一种将就绪事件派发给对应服务处理程序的事件设计模式。
1.2.Reactor模式的角色构成
Reactor主要由以下五个角色构成:
角色 解释 Handle(句柄) 用于标识不同的事件,本质就是一个文件描述符。 Sychronous Event Demultiplexer(同步事件分离器) 本质就是一个系统调用,用于等待事件的发生。对于Linux来说,同步事件分离器指的就是I/O多路复用,比如select、poll、epoll等。 Event Handler(事件处理器) 由多个回调方法构成,这些回调方法构成了与应用相关的对于某个事件的处理反馈。 Concrete Event Handler(具体事件处理器) 事件处理器中各个回调方法的具体实现。 Initiation Dispatcher(初始分发器) 初始分发器实际上就是Reactor角色,初始分发器会通过同步事件分离器来等待事件的发生,当对应事件就绪时就调用事件处理器,最后调用对应的回调方法来处理这个事件。
1.3.Reactor模式的工作流程
Reactor模式的工作流程如下:
1.当应用向初始分发器注册具体事件处理器时,应用会标识出该事件处理器希望初始分发器在某个事件发生时向其通知,该事件与Handle关联。
2.初始分发器会要求每个事件处理器向其传递内部的Handle,该Handle向操作系统标识了事件处理器。
3.当所有的事件处理器注册完毕后,应用会启动初始分发器的事件循环,这时初始分发器会将每个事件处理器的Handle合并起来,并使用同步事件分离器等待这些事件的发生。
4.当某个事件处理器的Handle变为Ready状态时,同步事件分离器会通知初始分发器。
5.初始分发器会将Ready状态的Handle作为key,来寻找其对应的事件处理器。
6.初始分发器会调用其对应事件处理器当中对应的回调方法来响应该事件。