黃群群
【摘要】 在信息系統建設過程中,數據交互是必不可少的一環。其中與異構系統進行網絡數據交互,并進一步進行業務處理是最為頻繁的。在一般的處理過程,數據的集合和散列往往和業務處理耦合在一起,這樣的話就會有很多重復開發。本文提出了一個通用的數據解析和組合引擎,根據配置的策略,對接收的數據包進行解析,對要發送的數據進行組合。
【關鍵詞】 數據處理引擎 網絡協議處理
在傳統的應用網絡協議開發過程中,往往要根據協議規范去進行設計編碼。應用協議多種多樣,信息系統建設人員對每一個應用協議都會進行重新的設計開發。要提高開發的效率,首先就要將網絡數據的接收解碼、編碼發送從業務的邏輯處理中解耦出來。
一、引擎總體架構
根據協議規范,數據包可劃分為若干域,每個域都可以抽象為某一種域類型。數據包中的這些域,有各種各樣的用途,但總體來說可以分為兩類:數據域和控制域。整個系統應該包括策略配置模塊,引擎模塊,域對象模塊。其中配置模塊負責在初始化階段讀取配置文件,獲得處理策略,引擎模塊根據這些策略進行數據處理。
二、域對象模塊
數據包中的域根據功能劃分,可以分為數據域和控制域。數據域主要是一些業務數據,不影響數據包中其他域的行為。控制域,可以對數據包的一些行為進行控制。
對于一些通用的域類型,系統已經提供對應的類。而對于外部系統的一些個性化的域,可以擴展到域對象模塊中。所有的域類都應該實現公共接口。該域應接口該如下定義:
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