智能配电数字终端软件系统消息设计方案
2.2 事件管理器循环设计
本系统中的事件管理器负责设备或定时事件的准备(Prepare)、选择(Select)、检查(Check)、处理(Dispatch)、清楚(Cleanup)5个步骤,事件管理器的分发循环如图4所示。
根据系统的实际需要,模型中定义事件源的基类Source。主站通信、定时采集、用户输入等多种具体的事件源可以继承自该基类。同时全局事件管理器SourceDispathcer提供3个操作来管理事件。待处理事件管理器类SourceDispatchContext则负责管理符合触发条件的事件。3个类之间的关系如图5所示。
从图5可看到,全局事件管理器提供接口ToRegisterSouree注册系统关心的事件,同时使用接口UnRegisterSource注销事件,iteration OfDispatch则负责事件分发循环的5个步骤。首先将所关心的I/O设备中文件描述符放入待检队列或者设定定时周期等参数;然后检查相关设备是否可读写或定时周期到达,将满足触发条件的事件放入待处理事件队列中;最后分别调用相关的事件处理函数处理事件,并清理待处理事件队列。
3 Reactor事件处理机制
3.1 事件源
在智能配电数字终端系统中,事件源主要由采集模块、主站通信、用户输入和定时器等抽象设备4大部分组成,关系如图6所示。
事件源在本系统中被封装成文件描述符,程序在指定的文件描述符上关注关心的事件。
3.2 I/O多路复用
通常对一个文件描述符指定的文件或设备进行I/O操作,系统有3种I/O方式:阻塞和非阻塞同步,以及复用型I/O。复用型I/O,指当满足一个或多个I/O条件(可读、可写或异常)时,进程能够立即知道,从而可以正确并高效的处理。
本系统的I/O多路复用使用一个事件多路分离器,分离器将来自事件源的I/O事件分离出来,并分发到对应的事件处理器。通常预先注册需要处理的事件及事件处理器(或回调函数);事件分离器负责将请求的事件传送给事件处理器。
3.3 定时器等抽象设备
在本系统中消息源主要都是I/O设备,可以用系统函数Select和poll来实现I/O多路复用机制。定时器作为一种特殊事件,虽然不能用Select函数将其放入待检查队列,但同样可以在事件分发循环的准备(Prepare)阶段设置定时周期等参数,检查(Check)定时周期是否到达,当定时周期到了,将定时处理事件放入待处理消息队列。
3.4 事件处理
对应每一个事件源,在初始阶段将动态库函数引入系统,建立事件到相应处理函数的映射,Message Center是事件处理的接口,侠处理函数的注册、注销,当有事件进入"就绪’状态时,调用注册事件的回调函数处理事件。事件处理中心类如图7所示。
各种具体事件的处理涵数在MessageCenter中进行注册,MessageCenter采用map容器对注册的各种事件处理函数进行管理,能够高效率地查找各相关处理函数,提高了系统的实时响应能力。事件处理的时序如图8所示。
4 结语
本文从智能配电数字终端系统实现的角度提出了一种基于Reactor的事件驱动模式消息管理方案,结合面向对象的思想,统一接口,对事件源和事件处理进行了封装。提高了事件的处理效率,保证了系统的实时性。根据实际需要可以在不同的系统中对于待消息队列中的事件用优先级加以区分。