下图是基于IoC理念重新设计的通用的开源采集服务器子系统体系结构:
8. 核心组件设计简介
1. 业务数据接口
以统一的方式,输出本框架按配置的“通信模块”、“通信协议”、“采集业务类”所采集到的数据。框架使用者实现此接口的方法可以继续分析、处理、存储、展现业务数据。
2. 外部系统接口
本系统对外部系统的接口,目前没有定义具体方法,属于框架设计预留接口。框架使用者可以实现此接口,定制通信协议、通信方式实现与外部系统信息交互。外围系统通过此接口向“业务调度核心类”发起通信命令、操控底层设备、实时提取设备状态等业务请求。
3. 业务调度核心类
是采集子系统的业务调度核心类和业务请求中转站。外部系统的命令请求通过“外部系统接口”转入到“业务调度核心类”,“业务调度核心类”将命令请求存入命令队列中共“”执行;“”采集到数据之后,调用“数据接口”的方法将数据返回到“业务调度核心类”,之后,“业务调度核心类”调用“业务数据接口”或者“外部系统接口”将业务数据反馈到更上层模块。
4. 任务队列管理类
下行任务信息缓存类。“业务调度核心类”向其中增加命令请求;“采集调度控制器”自动检测是否有新命令请求,当检测到后立即“中断”通信握手,执行请求,执行成功之后,从队列中删除该命令。
5. 采集调度控制类
管理、协调其下的“采集业务类”、“通信实现类”、“业务状态机类”、“通信协议类”等模块,完成所有的通信控制及数据采集功能。通过调用任务接口获取采集指令;之后,调用业务接口(业务接口由“采集业务类”实现,在具体使用中由框架使用者根据自己的业务采集需求开发),获取具体的通信指令;根据通信指令调用正确的协议接口(协议接口由“通信协议类”实现,在具体使用中由框架使用者根据自己的通信协议需求开发)获得通信帧;后,启动状态机开始本次采集任务的执行。采集调度控制器
6. 采集业务类
封装当前系统的具体采集业务对象,为通用的“采集调度控制类”定制具体的采集任务。本质是:把上层的“抽象任务”细化成具体的“通信帧”和“通信控制步骤”、是一个简单的“工作流定制器”。
7. 业务状态机类
实现状态机接口,根据采集业务状态的控制、转换需求,框架使用者定制开发。主要用于通信链路的通断控制、数据收发、忙闲标识及转换等业务状态机逻辑。
8. 采集方式类
封装具体的串口、TCP/IP、语音卡等通信采集类,实现具体的通信方式控制及通用的数据收发接口。
9. 通信协议类
封装系统中软件与底层软件子系统、硬件设备、远程终端的通信协议。
9. 设计模式与原理
1) 整个系统采用MVC的设计模式:业务数据、显示控制及界面显示严格分层,单独实现。业务数据通过下层模块产生,通用“业务调度核心”这个中介与“界面接口定制类”这个控制器交互;控制器“界面接口定制类”可以根据不同的显示需要进行定制,与不同的界面组件交互,可满足不同的显示需求;在界面显示层,引用了其它项目中实现的“标准界面通用组件库”中的部分源码。
2) “业务调度核心类”采用Mediator模式。
3) “采集调度控制器”采用“微内核”的实时设计模式。
4) 命令队列采用Command模式:以强制分离命令的发起者与命令的执行者。
5) “业务状态机”采用State模式:通过抽象业务状态机,可以灵活地实现不同采集控制需求。并且,如果采集方式类是语音卡之类的设备时,采集类里面也往往采集“状态机”模式来管理这类自身以状态方式驱动的通信设备。
6) “业务采集类”,对多协议的自动处理采用Chain Of Responsibility:将多个协议组件组织成一条“职责链”,实现对当前通信协议的自动识别、自动解析功能。
7) “采集调度控制器”,考虑并发和性能,采用“通道”的实时设计模式:以尽可能地提升系统并发能力、提高系统吞吐能力。
8) “采集调度控制器”,采用“轮巡”和“中断”的实时设计模式:为检测通信链路是否可用,在通信空闲时,系统要求与硬件终端进行定期“通信握手”,当“采集调度控制器”检测到“命令队列”或者“硬件终端”的任务请求时采用“中断”方式立即响应上、下行命令。
10. 应有实例
采用此框架的体系架构,框架使用者只需按“任务接口”实现自己特定的“任务队列管理类”,按“业务接口”实现自己特定的“采集业务类”,按“状态机接口”实现自己特定的通信业务控制“业务状态机类”,再按“协议接口”实现自己特定的“通信协议类”,能够非常快速地开发一个功能完备、运行稳定的通信采集服务器。目前,应有此框架已成功构建“指纹采集系统”、“粮情测控系统”的通信采集服务器。