APP下载

通用应用协议处理引擎

2015-05-30黄群群

中国新通信 2015年9期
关键词:链表引擎数据包

黄群群

【摘要】 在信息系统建设过程中,数据交互是必不可少的一环。其中与异构系统进行网络数据交互,并进一步进行业务处理是最为频繁的。在一般的处理过程,数据的集合和散列往往和业务处理耦合在一起,这样的话就会有很多重复开发。本文提出了一个通用的数据解析和组合引擎,根据配置的策略,对接收的数据包进行解析,对要发送的数据进行组合。

【关键词】 数据处理引擎 网络协议处理

在传统的应用网络协议开发过程中,往往要根据协议规范去进行设计编码。应用协议多种多样,信息系统建设人员对每一个应用协议都会进行重新的设计开发。要提高开发的效率,首先就要将网络数据的接收解码、编码发送从业务的逻辑处理中解耦出来。

一、引擎总体架构

根据协议规范,数据包可划分为若干域,每个域都可以抽象为某一种域类型。数据包中的这些域,有各种各样的用途,但总体来说可以分为两类:数据域和控制域。整个系统应该包括策略配置模块,引擎模块,域对象模块。其中配置模块负责在初始化阶段读取配置文件,获得处理策略,引擎模块根据这些策略进行数据处理。

二、域对象模块

数据包中的域根据功能划分,可以分为数据域和控制域。数据域主要是一些业务数据,不影响数据包中其他域的行为。控制域,可以对数据包的一些行为进行控制。

对于一些通用的域类型,系统已经提供对应的类。而对于外部系统的一些个性化的域,可以扩展到域对象模块中。所有的域类都应该实现公共接口。该域应接口该如下定义:

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

猜你喜欢

链表引擎数据包
基于二进制链表的粗糙集属性约简
跟麦咭学编程
SmartSniff
基于链表多分支路径树的云存储数据完整性验证机制
蓝谷: “涉蓝”新引擎
无形的引擎
基于Cocos2d引擎的PuzzleGame开发
链表方式集中器抄表的设计
视觉注意的数据包优先级排序策略研究
移动IPV6在改进数据包发送路径模型下性能分析