專利名稱:處理Diameter協(xié)議消息的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種處理Diameter協(xié)議消息的方法。
背景技術(shù):
Diameter協(xié)議被IETF的AAA工作組作為下一代的AAA協(xié)議標(biāo)準(zhǔn)。Diameter (為直徑,意味著Diameter協(xié)議是RADIUS協(xié)議的升級(jí)版本)協(xié)議包括基本協(xié)議、NAS (網(wǎng)絡(luò)接 入服務(wù))協(xié)議、EAP(可擴(kuò)展鑒別)協(xié)議、MIP(移動(dòng)IP)協(xié)議、CMS(密碼消息語(yǔ)法)協(xié)議等。 Diameter協(xié)議支持移動(dòng)IP、NAS請(qǐng)求和移動(dòng)代理的認(rèn)證、授權(quán)和計(jì)費(fèi)工作,協(xié)議的實(shí)現(xiàn)和 RADIUS類似,也是采用AVP (Attribute Value Pair,屬性值對(duì))來(lái)實(shí)現(xiàn),但是其中詳細(xì)規(guī)定 了錯(cuò)誤處理、failover機(jī)制,采用TCP協(xié)議,支持分布式計(jì)費(fèi),克服了 RADIUS的許多缺點(diǎn), 是最適合未來(lái)移動(dòng)通信系統(tǒng)的AAA協(xié)議。各通信運(yùn)營(yíng)商對(duì)Diameter協(xié)議的實(shí)現(xiàn),主要涉及中國(guó)移動(dòng)的Diameter協(xié)議、中國(guó) 電信的OCP協(xié)議和中國(guó)聯(lián)通的DCC(Diameter Credit Control)協(xié)議。應(yīng)用的場(chǎng)景有(1) 網(wǎng)元設(shè)備和在線計(jì)費(fèi)系統(tǒng)(Online ChargingSystem)交互;(2)在線計(jì)費(fèi)系統(tǒng)和余額管理 中心交換等等。在線計(jì)費(fèi)系統(tǒng)(Online Charging System,簡(jiǎn)稱0CS)是指參與通信過(guò)程控 制的計(jì)費(fèi)系統(tǒng),能夠解決用戶實(shí)時(shí)信用控制、預(yù)付費(fèi)使用數(shù)據(jù)業(yè)務(wù)和增值業(yè)務(wù)實(shí)時(shí)計(jì)費(fèi)等 問(wèn)題。OCS是3GPP網(wǎng)絡(luò)架構(gòu)中最重要的組成部分之一。為更好地指導(dǎo)3G環(huán)境下計(jì)費(fèi)支 撐體系的建設(shè),3GPP組織在32. 815提出了 OCS的參考結(jié)構(gòu),給出了具有開(kāi)放性和通用性的 實(shí)時(shí)計(jì)費(fèi)系統(tǒng)框架,支持基于承載、會(huì)話和內(nèi)容事件的統(tǒng)一計(jì)費(fèi)。這一框架將話務(wù)控制功能 與計(jì)費(fèi)功能相分離,使計(jì)費(fèi)系統(tǒng)參與到服務(wù)的使用過(guò)程中,用戶邊使用業(yè)務(wù),OCS邊計(jì)費(fèi)。作 為系統(tǒng)協(xié)議支撐Diameter,必須提供有力的實(shí)時(shí)性保證?,F(xiàn)有的Diameter實(shí)現(xiàn)性能存在一 定的瓶頸,在一定程度上限制了 OCS的并發(fā)處理能力。Diameter消息體可以認(rèn)為是一個(gè)Grouped類型AVP,每個(gè)Grouped類型的AVP里 面包含一組AVP (可以是Grouped類型)元素,也就是說(shuō),Diameter的消息體為多個(gè)AVP (屬 性值對(duì),即消息中的信息單元)組成,因此Diameter消息可以看作以AVP元素作為節(jié)點(diǎn)的 樹(shù)?,F(xiàn)在以電信的信用控制請(qǐng)求(Credit-Control-Request)消息為例,使用ABNF格式定 義如下<Credit-Control-Request) = <Diameter Header 272, REQ, PXY>Diameter ^ 議頭,REQ表示該消息為一個(gè)請(qǐng)求消息,其中272表示由Diameter協(xié)議標(biāo)準(zhǔn)組織分配該命 令碼的值;<Session-Id>{Origin-Host}源主機(jī)信息{Origin-Realm}源服務(wù)域信息{Destination-Realm}目的服務(wù)域信息{Auth-App1i cat i on-Id}
{Service-Context-Id}{CC-Request-Type}{CC-Request-Number}[Destination-Host][User-Name]
[Origin-State-Id][Event-Timestamp]*[Subscription-Id][Termination-Cause]氺[Route-Record][Requested-Action][Requested-Service-Unit]*[Used-Service-Unit][Multiple-Services-Indicator]*[Multiple-Services-Credit Control][CC-Correlation-Id][User-Equipment-Info]*[Proxy-Info][Service-Information];“<>”符號(hào)表示必選而且位置必須是在消息的開(kāi)頭的AVP,“{}”符號(hào)表示必選的 AVP, “ [] ”符號(hào)表示可選的AVP,“* [] ”符號(hào)表示可重復(fù)的可選的AVP0針對(duì)以上Diameter消息結(jié)構(gòu)抽象出的主要類有,用于存儲(chǔ)AVP屬性和值的 類(⑶iameterAVP),用于管理AVP的容器(OTiameterGroup)和用于管理整個(gè)消息的類 (CDiameterMessage)。這些類實(shí)現(xiàn)基本消息結(jié)構(gòu)和基本數(shù)據(jù)的存儲(chǔ),通過(guò)這些類可以很輕松的搞定消息 的管理。由于Diameter消息中存在“[]”和“*[] ”類型的AVP,每個(gè)消息的結(jié)構(gòu)都不是固 定的。因此每次Diameter消息使用時(shí)都必須做一次OTiameterMessage的構(gòu)造和析構(gòu)操 作,對(duì)應(yīng)的CDiameterGroup和CDiameterAVP也需要構(gòu)造和析構(gòu)。如果以new(生成)和 delete (銷毀)操作時(shí)間為1 μ s (UNIX機(jī)器實(shí)測(cè)結(jié)果)來(lái)計(jì)算,具有100個(gè)AVP的消息其 自身消耗的時(shí)間大概就是0. Ims0現(xiàn)在以電信OCS系統(tǒng)為例,當(dāng)系統(tǒng)壓力為1000CAPS(Call Attempts Per Second,每秒建立呼叫數(shù)量)時(shí),每秒處理的CCR消息數(shù)目為2500個(gè),每個(gè) 消息業(yè)務(wù)處理的時(shí)間為0. 4ms。消息自身處理時(shí)間和業(yè)務(wù)處理時(shí)間是同一個(gè)數(shù)量級(jí),這個(gè)處 理性能是滿足不了 OCS系統(tǒng)的?;蛟S內(nèi)存池可以解決這個(gè)問(wèn)題,當(dāng)發(fā)生頻繁的內(nèi)存操作時(shí) 大家傾向于利用內(nèi)存池來(lái)解決。但是,內(nèi)存池只是解決了消息new和delete的性能,并沒(méi) 有解決消息中所有AVP的生成和銷毀問(wèn)題,采用內(nèi)存池的實(shí)測(cè)結(jié)果也是同樣的性能,因此 并不能有效縮短消息處理時(shí)間。
發(fā)明內(nèi)容
因此,本發(fā)明的目的在于提供一種處理Diameter協(xié)議消息的方法,減少Diameter協(xié)議消息對(duì)象的生成和銷毀對(duì)系統(tǒng)資源的消耗。為實(shí)現(xiàn)上述目的,本發(fā)明提供一種處理Diameter協(xié)議消息的方法,其包括如下步 驟步驟1、應(yīng)用根據(jù)Diameter消息的id獲取內(nèi)存中預(yù)先存儲(chǔ)的Diameter消息模板, 并把該Diameter消息模板的結(jié)構(gòu)作為構(gòu)建Diameter消息對(duì)象結(jié)構(gòu)的初始狀態(tài);步驟2、根據(jù)實(shí)際的消息結(jié)構(gòu),增加或刪除Diameter消息對(duì)象結(jié)構(gòu)中的AVP對(duì)象, 從而修改Diameter消息對(duì)象的結(jié)構(gòu);步驟3、用棧來(lái)記錄步驟2中對(duì)Diameter消息結(jié)構(gòu)的每次操作;步驟4、應(yīng)用使用完消息后,根據(jù)棧中的記錄,將Diameter消息對(duì)象的結(jié)構(gòu)恢復(fù)為 初始狀態(tài)。其中,步驟2中,如果增加或刪除的AVP對(duì)象為Grouped類型的AVP對(duì)象,采用遞 歸方式處理所有的AVP對(duì)象。其中,對(duì)于Diameter消息的接收方來(lái)說(shuō),步驟1中使用的Diameter消息模板為空 結(jié)構(gòu)。其中,步驟1中,如果內(nèi)存中該Diameter消息模板數(shù)量為1,則先克隆該Diameter 消息模板,然后在克隆的Diameter消息模板基礎(chǔ)上構(gòu)建Diameter消息對(duì)象的結(jié)構(gòu)。其中,在步驟3中,將步驟2中對(duì)Diameter消息結(jié)構(gòu)的每次操作依次壓棧;步驟4 中恢復(fù)Diameter消息對(duì)象的結(jié)構(gòu)時(shí),將步驟3中記錄的操作依次出棧。其中,在內(nèi)存中以Diameter消息模板為對(duì)象建立對(duì)象池,同一種的Diameter消息 模板存放于同一對(duì)象池中,多種Diameter消息模板分別以多個(gè)對(duì)象池來(lái)管理,用圖來(lái)管理 這些不同的對(duì)象池,以鄰接表來(lái)表示該圖,鄰接表中的每個(gè)鏈表都表示一個(gè)對(duì)象池,通過(guò)增 加或減少鄰接表實(shí)現(xiàn)對(duì)象種類的增加或減少;在任一鏈表中,把鏈表中的第一個(gè)Diameter消息模板對(duì)象作為種子,該種子具備 自身的克隆功能,外部的應(yīng)用從鏈表中獲取Diameter消息模板對(duì)象時(shí),當(dāng)該鏈表中只有種 子對(duì)象時(shí),則返回一個(gè)種子克隆的對(duì)象,否則從該鏈表的隊(duì)列中取一個(gè)對(duì)象返回。其中,應(yīng)用所獲取的Diameter消息模板對(duì)象經(jīng)過(guò)步驟1_4的處理后,應(yīng)用釋放該 Diameter消息模板對(duì)象,并將該Diameter消息模板對(duì)象加入相應(yīng)的對(duì)象池。其中,該圖通過(guò)控制鏈表長(zhǎng)度的增加和減少來(lái)動(dòng)態(tài)控制對(duì)象池中的對(duì)象數(shù)目。其中,所述鏈表具有單鏈表功能。其中,所述鏈表對(duì)外部應(yīng)用提供獲取和釋放Diameter消息模板對(duì)象的接口。本發(fā)明所提供的處理Diameter協(xié)議消息的方法,通過(guò)具備智能記憶功能的 Diameter消息管理方式,以及能夠動(dòng)態(tài)增加對(duì)象種類和對(duì)象池大小的存放Diameter消息 的動(dòng)態(tài)對(duì)象池,方便應(yīng)用對(duì)消息的管理,降低系統(tǒng)資源的消耗。
下面結(jié)合附圖,通過(guò)對(duì)本發(fā)明的具體實(shí)施方式
詳細(xì)描述,將使本發(fā)明的技術(shù)方案 及其他有益效果顯而易見(jiàn)。
附圖中,圖1為本發(fā)明處理Diameter協(xié)議消息的方法一較佳實(shí)施例中智能記憶消息的設(shè)計(jì)類圖;圖2為本發(fā)明處理Diameter協(xié)議消息的方法一較佳實(shí)施例中發(fā)送消息的記憶和 恢復(fù)處理流程圖;圖3為本發(fā)明處理Diameter協(xié)議消息的方法的流程圖; 圖4為本發(fā)明處理Diameter協(xié)議消息的方法一較佳實(shí)施例中動(dòng)態(tài)對(duì)象池的設(shè)計(jì) 圖;圖5為本發(fā)明處理Diameter協(xié)議消息的方法一較佳實(shí)施例中動(dòng)態(tài)對(duì)象池和智能 記憶消息的時(shí)序圖。
具體實(shí)施例方式簡(jiǎn)化消息結(jié)構(gòu)的管理,減少消息對(duì)象的生成和銷毀對(duì)系統(tǒng)資源的消耗(CPU和內(nèi) 存),才能根本上減少消息的處理時(shí)間。如何做呢?本發(fā)明采用智能記憶消息的方式,通過(guò) 消息的智能記憶功能,達(dá)到消息的重復(fù)的利用。一次構(gòu)造多次使用,從而避免了每次業(yè)務(wù)處 理時(shí)的消息構(gòu)造和銷毀(這點(diǎn)類似于數(shù)據(jù)庫(kù)的一次pr印are,多次execute的道理)。因此,在本發(fā)明在一較佳實(shí)施中,增加了用于消息結(jié)構(gòu)改動(dòng)的記憶類 (CMemoryElem)和修改操作棧(statck<CMemoryElem*>),用于消息結(jié)構(gòu)修改的記憶和消息 結(jié)構(gòu)的恢復(fù)。如圖1所示,其為本發(fā)明處理Diameter協(xié)議消息的方法一較佳實(shí)施例中智能記 憶消息的設(shè)計(jì)類圖。圖中,CDiameterMessage 組合 CDiameterGroup 和 CDiameterAVP,用 以表示消息結(jié)構(gòu)和AVP的存儲(chǔ),并把這種結(jié)構(gòu)作為消息的模板,通過(guò)消息id來(lái)區(qū)分。這 樣的消息模板可以根據(jù)Diameter協(xié)議預(yù)先確定并存儲(chǔ)于內(nèi)存中,應(yīng)用通過(guò)在預(yù)先構(gòu)造 的消息模板的基礎(chǔ)上修改其結(jié)構(gòu),構(gòu)建符合應(yīng)用需求的消息結(jié)構(gòu)。CDiameterGroup和 CDiameterAVP是雙向關(guān)聯(lián)的關(guān)系,首先CDiameterGroup是CDiameterAVP的容器,其次當(dāng) CDiameterAVP 表示 Grouped 類型的 AVP 時(shí),對(duì)應(yīng)的值為 CDiameterGroup。CMemoryElem 依 賴于 CDiameterGroup 和 CDiameterAVP,用于表示消息結(jié)構(gòu)的改動(dòng),statck<CMemoryElem*> 用于表示消息改動(dòng)的整個(gè)過(guò)程。在此較佳實(shí)施例中,對(duì)智能記憶消息的設(shè)計(jì)類圖中記憶功 能相關(guān)的主要方法說(shuō)明如下DCDiameterMessage: clone,克隆方法實(shí)現(xiàn)OTiameterMessage對(duì)象結(jié)構(gòu)的構(gòu)造和拷貝功能,進(jìn)一步可與對(duì)象池協(xié)作來(lái) 實(shí)現(xiàn)消息數(shù)目的動(dòng)態(tài)增長(zhǎng)。2) CDiameterMessage recover,恢復(fù)方法從修改后的CDiameterMessage對(duì)象中恢復(fù)過(guò)來(lái),把用戶對(duì)CDiameterMessage對(duì) 象操作進(jìn)行逆操作(例如增加AVP的操作變成刪除AVP的操作)3) CDiameterMessage :add (CDiameterGroup^group, int pos,int num),增刪 AVP 操作Group用來(lái)標(biāo)識(shí)待修改的CDiameterGroup的對(duì)象;pos指示參照CDiameterAVP對(duì) 象的位置;num代表增刪的數(shù)目(> O表示增加,< O代表刪除)。4) CDiameterMessage: value,2Sl^I 白勺 CDiameterAVP ( iSS才目jS白勺 內(nèi)存空間)
⑶iameterMessage對(duì)象管理了一組⑶iameterAVP對(duì)象,并且存在一些空閑的,用 來(lái)修改CDiameterMessage對(duì)象結(jié)構(gòu)的時(shí)候用。5) CDiameterMessage: group,fgl^ 白勺 CDiameterGroup ( ^KffijS 的內(nèi)存空間)⑶iameterMessage對(duì)象管理了一組⑶iameterGroup對(duì)象,并且存在一些空閑 的, 用來(lái)修改⑶iameterMessage對(duì)象結(jié)構(gòu)的時(shí)候用。6)stack: :push,對(duì)象壓棧把修改操作(增加或刪除⑶iameterAVP對(duì)象)放入棧中,為⑶iameterMessage 對(duì)象恢復(fù)時(shí)用。7) stack pop,對(duì)象出棧把修改操作(增加或刪除CDiameterAVP對(duì)象)從棧中取出,用來(lái)恢復(fù) CDiameterMessage 對(duì)象。對(duì)于每一種Diameter消息,有兩種原始狀態(tài),分別為發(fā)起方和接收方使用消息的 狀態(tài)。發(fā)送方使用的原始消息結(jié)構(gòu)(消息模板)是由“ ”、“ {} ”和一個(gè)“[],,的AVP組 成。應(yīng)用通過(guò)CDiameterMessage的add方法進(jìn)行消息結(jié)構(gòu)的調(diào)整,通過(guò)CDiameterMessage 的recover方法把消息恢復(fù)成原始消息結(jié)構(gòu)。當(dāng)對(duì)應(yīng)的“ □”部分不需要時(shí),通過(guò) CDiameterMessage 的 add 方法把 CDiameterGroup 對(duì)應(yīng)位置的 CDiameterAVP 刪除;當(dāng)對(duì) 應(yīng)的“[]”需要多組(n組)時(shí),通過(guò)CDiameterMessage的add方法把CDiameterGroup對(duì) 應(yīng)位置的CDiameterAVP增加n_l個(gè)。CDiameterMessage的每個(gè)add操作都會(huì)生成一個(gè) CMemoryElem 壓入棧中,當(dāng)調(diào)用 CDiameterMessage 的 recover 方法時(shí),依次把 CMemoryElem 出棧,并執(zhí)行CMemoryElem的逆向操作。如圖2所示,其為本發(fā)明處理Diameter協(xié)議消息的方法一較佳實(shí)施例中發(fā)送消息 的記憶和恢復(fù)處理流程圖。發(fā)送消息的記憶和恢復(fù)處理流程如下1)build(),CDiameterMessage對(duì)象結(jié)構(gòu)的構(gòu)建,把該結(jié)構(gòu)(Diameter消息模板) 作為初始狀態(tài),以后的恢復(fù)操作就恢復(fù)到這個(gè)狀態(tài)。2) get (),應(yīng)用獲取到 CDiameterMessage 對(duì)象的句柄。3) add(),根據(jù)實(shí)際的消息結(jié)構(gòu),應(yīng)用修改CDiameterMessage對(duì)象,為其增加一個(gè) ⑶iameterAVP對(duì)象(本例程中僅僅是增加一個(gè)對(duì)象,實(shí)際上支持增加⑶iameterGroup對(duì) 象,可通過(guò)遞歸實(shí)現(xiàn)),從而生成滿足應(yīng)用需求的Diameter消息。4) get (),獲取一個(gè)CDiameterAVP對(duì)象,用于表示新增加的CDiameterAVP對(duì)象。5) get (),獲取一個(gè)CMemoryElem對(duì)象,用于記錄剛才的增加操作。6)push(),把 CMemoryElem 對(duì)象壓棧,用于 CDiameterMessage 對(duì)象的恢復(fù)操作。7)recover (),把CDiameterMessage對(duì)象恢復(fù)成初始狀態(tài),也就是恢復(fù)為模板的 狀態(tài)。8) pop 0,把棧中的CMemoryElem對(duì)象彈出,并根據(jù)這個(gè)對(duì)象獲取對(duì)應(yīng)的add ()操作。9) put (),把CMemoryElem對(duì)象釋放,該方法名與get ()配對(duì),主要是考慮工整。10) put (),釋放 CDiameterAVP 對(duì)象。
整個(gè)操作過(guò)程就是AVP的增加和刪除的過(guò)程。通過(guò)這個(gè)過(guò)程簡(jiǎn)單的展示了智能記 憶和恢復(fù)過(guò)程,實(shí)際情況可能會(huì)復(fù)雜的多,例如增加一個(gè)Grouped類型的AVP,需要遞歸的 處理完所有的AVP??梢园阎悄苡洃浝斫鉃檎僮骱湍娌僮鲀蓚€(gè)過(guò)程,應(yīng)用修改消息結(jié)構(gòu)是 正操作,恢復(fù)操作就是對(duì)應(yīng)的逆操作,堆棧是輔助完成逆操作的工具。另一方面,接收方使用的原始消息結(jié)構(gòu)(消息模板)是一個(gè)空結(jié)構(gòu),沒(méi)有 ⑶iameterGroup和⑶iameterAVP。接收方在網(wǎng)絡(luò)數(shù)據(jù)的解析過(guò)程中生成消息結(jié)構(gòu),遇到 Gouped類型的AVP時(shí)則增加CDiameterGroup,其它情況則增加CDiameterAVP。當(dāng)應(yīng)用回收 消息時(shí),調(diào)用⑶iameterGroup的recover方法,把消息恢復(fù)到空結(jié)構(gòu)狀態(tài)。接受消息的處 理流程與發(fā)送消息類似這里就不再贅述。綜上,可得出本發(fā)明處理Diameter協(xié)議消息的方法。如圖3所示,其為本發(fā)明處 理Diameter協(xié)議消息的方法的流程圖,本發(fā)明的處理Diameter協(xié)議消息的方法包括如下 步驟 步驟1、應(yīng)用根據(jù)Diameter消息的id獲取內(nèi)存中預(yù)先存儲(chǔ)的Diameter消息模 板,以該Diameter消息模板為基礎(chǔ)構(gòu)建Diameter消息對(duì)象的結(jié)構(gòu),并把該結(jié)構(gòu)作為初始狀 態(tài);步驟2、根據(jù)實(shí)際的消息結(jié)構(gòu),增加或刪除Diameter消息對(duì)象結(jié)構(gòu)中的AVP對(duì)象, 從而修改Diameter消息對(duì)象的結(jié)構(gòu);步驟3、用棧來(lái)記錄步驟2中對(duì)Diameter消息結(jié)構(gòu)的每次操作;步驟4、應(yīng)用使用完消息后,根據(jù)棧中的記錄,將Diameter消息對(duì)象的結(jié)構(gòu)恢復(fù)為 初始狀態(tài),也就是恢復(fù)了消息模板的原始結(jié)構(gòu),從而可以使該模板再次使用。步驟1中,如果內(nèi)存中該Diameter消息模板數(shù)量為1,則先克隆該Diameter消息 模板,然后在克隆的Diameter消息模板基礎(chǔ)上構(gòu)建Diameter消息對(duì)象的結(jié)構(gòu),從而可以保 證內(nèi)存中總是存在可用的Diameter消息模板。在步驟3中,將步驟2中對(duì)Diameter消息結(jié)構(gòu)的每次操作依次壓棧;步驟4中恢 復(fù)Diameter消息對(duì)象的結(jié)構(gòu)時(shí),將步驟3中記錄的操作依次出棧。在處理具體Diameter消息的方式上,本發(fā)明提供了這種具有智能記憶功能的 Diameter消息,該消息是基于文檔對(duì)象模型(Document Obiect Model)的機(jī)制設(shè)計(jì),用于存 儲(chǔ)樹(shù)狀結(jié)構(gòu)的AVP (Attribute-Length-Value),方便Diameter應(yīng)用的消息操作,增刪消息 中的AVP和修改對(duì)應(yīng)AVP的值;同時(shí)該消息具有記憶功能,能從修改操作中還原回來(lái)。對(duì)于Diameter消息模板的集合,可進(jìn)一步采用對(duì)象池的方式來(lái)處理。對(duì)象池是一 組對(duì)象的集合,對(duì)應(yīng)用提供獲取和釋放接口,實(shí)現(xiàn)對(duì)象的重用功能。但是,一般的對(duì)象池只 能存放一類對(duì)象,如果需要管理多種對(duì)象,就必須創(chuàng)建多個(gè)對(duì)象池,大大增加的應(yīng)用的復(fù)雜 度。同時(shí)對(duì)象池的容量是固定的,容易造成對(duì)象不夠用和資源的浪費(fèi)的情況。對(duì)于Diameter 消息模板組成的對(duì)象池來(lái)說(shuō),如何才能動(dòng)態(tài)的增加對(duì)象的種類,滿足業(yè)務(wù)不斷的擴(kuò)展的需 要?如何動(dòng)態(tài)的控制對(duì)象的數(shù)目,合理有效的利用資源?本發(fā)明提供了以下的解決辦法在內(nèi)存中以Diameter消息模板為對(duì)象建立對(duì)象池,同一種的Diameter消息模板 存放于同一對(duì)象池中,多種Diameter消息模板分別以多個(gè)對(duì)象池來(lái)管理,用圖來(lái)管理這些 不同的對(duì)象池,以鄰接表來(lái)表示該圖,鄰接表中的每個(gè)鏈表都表示一個(gè)對(duì)象池,通過(guò)增加或 減少鄰接表實(shí)現(xiàn)對(duì)象種類的增加或減少;
在任一鏈表中,把鏈表中的第一個(gè)Diameter消息模板對(duì)象作為種子,該種子具備 自身的克隆功能,外部的應(yīng)用從鏈表中獲取Diameter消息模板對(duì)象時(shí),當(dāng)該鏈表中只有種 子對(duì)象時(shí),則返回一個(gè)種子克隆的對(duì)象,否則從該鏈表的隊(duì)列中取一個(gè)對(duì)象返回。如圖4所示,其為本發(fā)明處理Diameter協(xié)議消息的方法一較佳實(shí)施例中動(dòng)態(tài) 對(duì)象池的設(shè)計(jì)圖。本發(fā)明引入了圖的概念和克隆技術(shù),解決了動(dòng)態(tài)的增加對(duì)象的種類和 動(dòng)態(tài)的控制對(duì)象的數(shù)目這兩個(gè)問(wèn)題。根據(jù)以上描述結(jié)合圖4,在此較佳實(shí)施例中,用類 CObjectGraph實(shí)現(xiàn)圖,用來(lái)管理不同的對(duì)象池;用CObjectPool實(shí)現(xiàn)對(duì)象池,用來(lái)管理相同 類別的對(duì)象;通過(guò)模板機(jī)制定義的CObjectGraph和CObjectPool,提供了更大擴(kuò)展空間。 CObjectGraph提供了 add和del方法,實(shí)現(xiàn)鏈表的動(dòng)態(tài)增加和減少,也就是說(shuō),該圖通過(guò)控 制鏈表長(zhǎng)度的增加和減少來(lái)動(dòng)態(tài)控制對(duì)象池中的對(duì)象數(shù)目。通過(guò)out和in方法實(shí)現(xiàn)對(duì)象 的獲取和回收。CObiectPool繼承了標(biāo)準(zhǔn)庫(kù)的list,實(shí)現(xiàn)了單鏈表功能,也就是說(shuō),鄰接表 中的鏈表具有單鏈表功能。CObiectPool同時(shí)對(duì)外提供out和in方法,實(shí)現(xiàn)相同對(duì)象的獲 取和回收,也就是說(shuō),鏈表對(duì)外部應(yīng)用提供獲取和釋放Diameter消息模板對(duì)象的接口。普通的對(duì)象池創(chuàng)建時(shí)指定對(duì)象的種類和池的大小,缺乏了靈活性和擴(kuò)展性。本發(fā) 明所提供的存放Diameter消息模板的動(dòng)態(tài)對(duì)象池,有別于普通的對(duì)象池,對(duì)象的種類和池 的大小可以進(jìn)行動(dòng)態(tài)的調(diào)整,在合理利用系統(tǒng)資源的同時(shí)大大的增加的應(yīng)用的擴(kuò)展性。與 普通的對(duì)象池類似,本發(fā)明所應(yīng)用的動(dòng)態(tài)對(duì)象池在對(duì)外提供對(duì)象前,首先需要進(jìn)行必要的 初始化。有所不同的是,該動(dòng)態(tài)對(duì)象池不需要?jiǎng)?chuàng)建最大數(shù)目的對(duì)象,只需要為每類對(duì)象創(chuàng)建 一個(gè)種子,對(duì)象池會(huì)隨著使用趨于平衡(找到對(duì)象的最大數(shù)目)。對(duì)象初始化完成后,就是 對(duì)象的重復(fù)利用,直至對(duì)象池的銷毀。也就是說(shuō),應(yīng)用所獲取的Diameter消息模板對(duì)象按 照?qǐng)D3經(jīng)過(guò)步驟1-4的處理后,應(yīng)用釋放該Diameter消息模板對(duì)象,并將該Diameter消息 模板對(duì)象加入相應(yīng)的對(duì)象池,也就是使用過(guò)的Diameter消息模板對(duì)象會(huì)重新加入對(duì)象池 中,從而保證Diameter消息模板可以重復(fù)應(yīng)用,而且Diameter消息模板的數(shù)量隨著系統(tǒng)應(yīng) 用的需求而動(dòng)態(tài)增加或減少,直至達(dá)到平衡狀態(tài)。如圖5所示,其為本發(fā)明處理Diameter協(xié)議消息的方法一較佳實(shí)施例中動(dòng)態(tài)對(duì)象 池和智能記憶消息的時(shí)序圖。消息流轉(zhuǎn)時(shí)序如下1) out (),應(yīng)用根據(jù)id從動(dòng)態(tài)對(duì)象池中獲取Diameter消息模板。2) out (),從id對(duì)應(yīng)的鏈表中獲取Diameter消息模板。3)siZe(),判斷id對(duì)應(yīng)的鏈表大小,如果大小為1,則進(jìn)行對(duì)象的克隆操作即操作 步驟4);否則執(zhí)行操作步驟6)。4) clone (),進(jìn)行消息的克隆操作。5) return (),消息克隆操作返回。6) return (),鏈表操作返回。7) return (),動(dòng)態(tài)對(duì)象池操作返回。8) operation (),修改Diameter消息的結(jié)構(gòu),增加或刪除消息中的avp。調(diào)用 CDiameterMessage :add()卞法。9) in (),應(yīng)用釋放 Diameter 消息。10) in (),執(zhí)行鏈表的回收操作。11) recover (),Diameter 消息模板恢復(fù)。
12) return (),消息恢復(fù)返回。13) return (),鏈表操作返回。14) return (),動(dòng)態(tài)對(duì)象池操作返回。綜上,本發(fā)明所提供的處理Diameter協(xié)議消息的方法,通過(guò)具備智能記憶功能的 Diameter消息管理方式,以及能夠動(dòng)態(tài)增加對(duì)象種類和對(duì)象池大小的存放Diameter消息 的動(dòng)態(tài)對(duì)象池,方便應(yīng)用對(duì)消息的管理,降低系統(tǒng)資源的消耗。以上所述,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),可以根據(jù)本發(fā)明的技術(shù)方案和技術(shù) 構(gòu)思作出其他各種相應(yīng)的改變和變形,而所有這些改變和變形都應(yīng)屬于本發(fā)明后附的權(quán)利 要求的保護(hù)范圍。
權(quán)利要求
一種處理Diameter協(xié)議消息的方法,其特征在于,包括如下步驟步驟1、應(yīng)用根據(jù)Diameter消息的id獲取內(nèi)存中預(yù)先存儲(chǔ)的Diameter消息模板,并把該Diameter消息模板的結(jié)構(gòu)作為構(gòu)建Diameter消息對(duì)象結(jié)構(gòu)的初始狀態(tài);步驟2、根據(jù)實(shí)際的消息結(jié)構(gòu),增加或刪除Diameter消息對(duì)象結(jié)構(gòu)中的AVP對(duì)象,從而修改Diameter消息對(duì)象的結(jié)構(gòu);步驟3、用棧來(lái)記錄步驟2中對(duì)Diameter消息結(jié)構(gòu)的每次操作;步驟4、應(yīng)用使用完消息后,根據(jù)棧中的記錄,將Diameter消息對(duì)象的結(jié)構(gòu)恢復(fù)為初始狀態(tài)。
2.如權(quán)利要求1所述的處理Diameter協(xié)議消息的方法,其特征在于,步驟2中,如果增 加或刪除的AVP對(duì)象為Grouped類型的AVP對(duì)象,采用遞歸方式處理所有的AVP對(duì)象。
3.如權(quán)利要求1所述的處理Diameter協(xié)議消息的方法,其特征在于,對(duì)于Diameter消 息的接收方來(lái)說(shuō),步驟1中使用的Diameter消息模板為空結(jié)構(gòu)。
4.如權(quán)利要求1所述的處理Diameter協(xié)議消息的方法,其特征在于,步驟1中,如 果內(nèi)存中該Diameter消息模板數(shù)量為1,則先克隆該Diameter消息模板,然后在克隆的 Diameter消息模板基礎(chǔ)上構(gòu)建Diameter消息對(duì)象的結(jié)構(gòu)。
5.如權(quán)利要求1所述的處理Diameter協(xié)議消息的方法,其特征在于,在步驟3中,將步 驟2中對(duì)Diameter消息結(jié)構(gòu)的每次操作依次壓棧;步驟4中恢復(fù)Diameter消息對(duì)象的結(jié) 構(gòu)時(shí),將步驟3中記錄的操作依次出棧。
6.如權(quán)利要求1所述的處理Diameter協(xié)議消息的方法,其特征在于,在內(nèi)存中以 Diameter消息模板為對(duì)象建立對(duì)象池,同一種的Diameter消息模板存放于同一對(duì)象池中, 多種Diameter消息模板分別以多個(gè)對(duì)象池來(lái)管理,用圖來(lái)管理這些不同的對(duì)象池,以鄰接 表來(lái)表示該圖,鄰接表中的每個(gè)鏈表都表示一個(gè)對(duì)象池,通過(guò)增加或減少鄰接表實(shí)現(xiàn)對(duì)象 種類的增加或減少;在任一鏈表中,把鏈表中的第一個(gè)Diameter消息模板對(duì)象作為種子,該種子具備自身 的克隆功能,外部的應(yīng)用從鏈表中獲取Diameter消息模板對(duì)象時(shí),當(dāng)該鏈表中只有種子對(duì) 象時(shí),則返回一個(gè)種子克隆的對(duì)象,否則從該鏈表的隊(duì)列中取一個(gè)對(duì)象返回。
7.如權(quán)利要求6所述的處理Diameter協(xié)議消息的方法,其特征在于,應(yīng)用所獲取的 Diameter消息模板對(duì)象經(jīng)過(guò)步驟1_4的處理后,應(yīng)用釋放該Diameter消息模板對(duì)象,并將 該Diameter消息模板對(duì)象加入相應(yīng)的對(duì)象池。
8.如權(quán)利要求6所述的處理Diameter協(xié)議消息的方法,其特征在于,該圖通過(guò)控制鏈 表長(zhǎng)度的增加和減少來(lái)動(dòng)態(tài)控制對(duì)象池中的對(duì)象數(shù)目。
9.如權(quán)利要求6所述的處理Diameter協(xié)議消息的方法,其特征在于,所述鏈表具有單 鏈表功能。
10.如權(quán)利要求6所述的處理Diameter協(xié)議消息的方法,其特征在于,所述鏈表對(duì)外部 應(yīng)用提供獲取和釋放Diameter消息模板對(duì)象的接口。
全文摘要
本發(fā)明涉及一種處理Diameter協(xié)議消息的方法,包括如下步驟步驟1、應(yīng)用根據(jù)Diameter消息的id獲取內(nèi)存中預(yù)先存儲(chǔ)的Diameter消息模板,并把該Diameter消息模板的結(jié)構(gòu)作為構(gòu)建Diameter消息對(duì)象結(jié)構(gòu)的初始狀態(tài);步驟2、根據(jù)實(shí)際的消息結(jié)構(gòu),增加或刪除Diameter消息對(duì)象結(jié)構(gòu)中的AVP對(duì)象,從而修改Diameter消息對(duì)象的結(jié)構(gòu);步驟3、用棧來(lái)記錄步驟2中對(duì)Diameter消息結(jié)構(gòu)的每次操作;步驟4、應(yīng)用使用完消息后,根據(jù)棧中的記錄,將Diameter消息對(duì)象的結(jié)構(gòu)恢復(fù)為初始狀態(tài)。本發(fā)明所提供的處理Diameter協(xié)議消息的方法,方便應(yīng)用對(duì)消息的管理,降低系統(tǒng)資源的消耗。
文檔編號(hào)G06F9/44GK101872303SQ20101019139
公開(kāi)日2010年10月27日 申請(qǐng)日期2010年6月3日 優(yōu)先權(quán)日2010年6月3日
發(fā)明者周發(fā)軍, 楊海, 梁林志, 汪東升, 蔣述庭 申請(qǐng)人:深圳天源迪科信息技術(shù)股份有限公司