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