通用应用协议处理引擎
2015-05-30黄群群
黄群群
【摘要】 在信息系统建设过程中,数据交互是必不可少的一环。其中与异构系统进行网络数据交互,并进一步进行业务处理是最为频繁的。在一般的处理过程,数据的集合和散列往往和业务处理耦合在一起,这样的话就会有很多重复开发。本文提出了一个通用的数据解析和组合引擎,根据配置的策略,对接收的数据包进行解析,对要发送的数据进行组合。
【关键词】 数据处理引擎 网络协议处理
在传统的应用网络协议开发过程中,往往要根据协议规范去进行设计编码。应用协议多种多样,信息系统建设人员对每一个应用协议都会进行重新的设计开发。要提高开发的效率,首先就要将网络数据的接收解码、编码发送从业务的逻辑处理中解耦出来。
一、引擎总体架构
根据协议规范,数据包可划分为若干域,每个域都可以抽象为某一种域类型。数据包中的这些域,有各种各样的用途,但总体来说可以分为两类:数据域和控制域。整个系统应该包括策略配置模块,引擎模块,域对象模块。其中配置模块负责在初始化阶段读取配置文件,获得处理策略,引擎模块根据这些策略进行数据处理。
二、域对象模块
数据包中的域根据功能划分,可以分为数据域和控制域。数据域主要是一些业务数据,不影响数据包中其他域的行为。控制域,可以对数据包的一些行为进行控制。
对于一些通用的域类型,系统已经提供对应的类。而对于外部系统的一些个性化的域,可以扩展到域对象模块中。所有的域类都应该实现公共接口。该域应接口该如下定义:
Class Field
{
Puhlic,:
Parse(char%uf);,/解析
Marshal(char*bllD;/,组包
Verification(char *buf)
Exception0;
Bool IsControlField;//区分是控制域还是数据域
Int size,
}
处理引擎提供若干常用的域类型,每个域类型都继承这个基类。并可以扩展更多域类型。控制域类型也是继承于Field类,但是有更多的操作。定义如下
Class CtrIField:puhlic Field
{
Public.:
Parse(char *buf)
{
}
Marshal(char *buf)
{
}
Char*RcvCtrl(char *huf,int fd);
Char * SendCtrl (char *buf,int fd);
int ParseCtrl(char *buf,int index);
int MarhalCtrl(char *bufint index);
}
其中Rcv Ctrl和SendCtrl在接收和发送阶段对数据进行控制处理,而ParseCtrl和MarshalCtrl在解析和组合数据包过程中进行控制处理。所有的控制域都继承该类。
三、引擎模块
引擎模块作为系统的核心部分,从配置模块获得对应数据包类型的策略,根据策略对接收或者发送的数据包进行处理。处理策略其实就是根据配置的包的域顺序,构造的链表,引擎根据该链表,顺序的取出每个域,并调用该域的方法。整个策略引擎分为数据的接收和发送过程。
Class Packet
{
Map parse(char*buffer);
Char * marshal (Map map);
Send(char *huffer);
Rcv(char *buffer)
Listlist:,/策略链表
Preproc(char* buffer);//预处理
mProc,(char* buffer);//中处理
Afterproc(Map map);//后处理
List