張萌,朱曉民
(1 北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京 100876; 2 東信北郵信息技術(shù)有限公司,北京 100191)
IIP系統(tǒng)XJOIN框架的設(shè)計(jì)與實(shí)現(xiàn)*
張萌1,2,朱曉民1,2
(1 北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京 100876; 2 東信北郵信息技術(shù)有限公司,北京 100191)
獨(dú)立智能外設(shè)(IIP)系統(tǒng)是智能網(wǎng)中重要的功能實(shí)體之一,完成特殊資源功能(SRF),向智能網(wǎng)的終端用戶提供各種的專用資源服務(wù)?,F(xiàn)有兩套IIP系統(tǒng)平臺(tái)產(chǎn)品:控制節(jié)點(diǎn)(CN)和下一代核心業(yè)務(wù)平臺(tái)——應(yīng)用服務(wù)器(NCSP-AS),二者在能力上有較多重疊,但由于技術(shù)實(shí)現(xiàn)和開發(fā)語言上的差異,需要各自設(shè)立相關(guān)的開發(fā)和維護(hù)人員,造成了人力使用和軟件維護(hù)成本的浪費(fèi)。針對(duì)這一問題,本文集合原有平臺(tái)能力和優(yōu)點(diǎn)設(shè)計(jì)了新產(chǎn)品——媒體業(yè)務(wù)平臺(tái)。該平臺(tái)基于CN平臺(tái)底層架構(gòu)和NCSP-AS平臺(tái)的業(yè)務(wù)加載模式,運(yùn)用MVC設(shè)計(jì)模式,實(shí)現(xiàn)XJOIN框架,達(dá)到業(yè)務(wù)邏輯和平臺(tái)數(shù)據(jù)的顯示分離,完成兩套平臺(tái)業(yè)務(wù)加載模塊的融合。
IIP;MVC;XJOIN
獨(dú)立智能外設(shè)(IIP,Independent Intelligent Peripheral)系統(tǒng)充分借鑒CTI技術(shù)發(fā)展的最新成果;采用高可靠性、高性能主機(jī)系統(tǒng)和高性能的國(guó)外成熟資源板卡;吸收國(guó)際上軟件體系結(jié)構(gòu)最新思想,采用多層體系結(jié)構(gòu),實(shí)現(xiàn)軟件系統(tǒng)的穩(wěn)健性、易擴(kuò)展性和高性能;采用完整的面向?qū)ο蟮乃枷?、工具,分析、設(shè)計(jì)、實(shí)現(xiàn)和部署。系統(tǒng)具有完整的信令接口,支持多種組網(wǎng)方式,采用的是集中控制的分布處理方式,向智能網(wǎng)的終端用戶提供各種的專用資源服務(wù),系統(tǒng)具有完整的信令接口,支持多種組網(wǎng)方式,采用的是集中控制的分布處理方式,從功能角度看,本系統(tǒng)主要由控制節(jié)點(diǎn)(CN)、資源節(jié)點(diǎn)(RN)、信令節(jié)點(diǎn)和維護(hù)系統(tǒng)組成。
媒體業(yè)務(wù)平臺(tái)CN由高性能計(jì)算機(jī)服務(wù)器構(gòu)成,它集中控制并管理所有資源,是整個(gè)獨(dú)立智能外設(shè)的靈魂,同時(shí)提供與SMP和網(wǎng)管等的接口?;谠瑿N、NCSP-AS兩個(gè)平臺(tái)的優(yōu)勢(shì)和特點(diǎn),并充分調(diào)研電信、互聯(lián)網(wǎng)業(yè)務(wù)模式發(fā)展的趨勢(shì),網(wǎng)絡(luò)發(fā)展的趨勢(shì),整理出NCSP-AS在能力(業(yè)務(wù)開發(fā)、基礎(chǔ)功能、接入?yún)f(xié)議等)、操作維護(hù)(安裝部署、操作手段等)、性能、架構(gòu)(可擴(kuò)展行、穩(wěn)定性等)等方面的需求,在新系統(tǒng)中得以實(shí)現(xiàn)。原IIP-CN構(gòu)架中觸發(fā)業(yè)務(wù)邏輯部分是開發(fā)人員自行開發(fā)的一種編譯語言——業(yè)務(wù)邏輯程序 (SLP),業(yè)務(wù)人員學(xué)習(xí)語法并使用。但是業(yè)務(wù)開發(fā)隨著IP網(wǎng)絡(luò)協(xié)議的復(fù)雜化,SLP支持的協(xié)議存儲(chǔ)數(shù)據(jù)字段需頻繁更改底層代碼,開發(fā)極其不便利,所以本論文設(shè)計(jì)開發(fā)XJOIN框架替代IIP-CN構(gòu)架中的SLP,用XJOIN來處理CN中事件觸發(fā)業(yè)務(wù)部分,并提供簡(jiǎn)單易懂的接口和語法規(guī)則來讓業(yè)務(wù)人員進(jìn)行業(yè)務(wù)邏輯開發(fā)和設(shè)計(jì)。
1.1 XJOIN模塊總體架構(gòu)
圖1 XJOIN模塊內(nèi)部結(jié)構(gòu)圖
XJOIN框架嵌入CN系統(tǒng)中,以CN后臺(tái)為控制臺(tái),以CN編解碼一次呼叫為模型,以業(yè)務(wù)邏輯開發(fā)的XML文檔為視圖的用C++語言開發(fā)的基于MVC設(shè)計(jì)模式的框架。下面從MVC設(shè)計(jì)模式的模塊、視圖和控制3部分介紹圖1所示的XJOIN的總體架構(gòu):XjoinService模塊是模塊部分,用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對(duì)數(shù)據(jù)的處理方法。XJOIN的模塊部分(XjoinService)提供經(jīng)過協(xié)議解析,消息處理等的固定數(shù)據(jù),如每次呼叫的主被叫號(hào)碼,定制的業(yè)務(wù)等。Application標(biāo)簽節(jié)點(diǎn)是視圖XML的根節(jié)點(diǎn),業(yè)務(wù)邏輯的觸發(fā)從Application開始執(zhí)行,XML以動(dòng)態(tài)鏈接庫(kù)的方式訪問它所監(jiān)視的數(shù)據(jù)模型(Model),獲得底層實(shí)時(shí)提供的原始數(shù)據(jù)資源。Application標(biāo)簽節(jié)點(diǎn)下面,有Event標(biāo)簽節(jié)點(diǎn),控制器通過Event來起到不同層面間的組織作用,用于控制應(yīng)用程序的流程,它處理事件并做出響應(yīng)?!笆录卑ㄓ脩舻男袨楹蛿?shù)據(jù)模型上的改變。
1.2 XJOIN的View模塊
該模塊通過實(shí)現(xiàn)XML業(yè)務(wù)邏輯文件的讀取和存儲(chǔ),設(shè)計(jì)View視圖的數(shù)據(jù)結(jié)構(gòu)。如圖2所示:業(yè)務(wù)邏輯有一個(gè)根節(jié)點(diǎn),標(biāo)簽名字為Application,Application節(jié)點(diǎn)包含Session和Event節(jié)點(diǎn),業(yè)務(wù)一般從Application根節(jié)點(diǎn)的配置開始,按照樹的結(jié)構(gòu),逐個(gè)配置子Session。Session節(jié)點(diǎn)代表一個(gè)會(huì)話,在一次業(yè)務(wù)邏輯里,可以有多方會(huì)話,會(huì)話之間可以發(fā)送請(qǐng)求消息。響應(yīng)消息以事件的形式完成業(yè)務(wù)邏輯的執(zhí)行,每個(gè)Session里面通常配置一組相關(guān)的Event及Event包含的Handler組成。Session還支持嵌套結(jié)構(gòu),一般為兩層。在配置的時(shí)候,可以根據(jù)業(yè)務(wù)邏輯或者所處理的具體協(xié)議的會(huì)話關(guān)系來劃分不同的Session。當(dāng)觸發(fā)業(yè)務(wù)邏輯根節(jié)點(diǎn)后,順序執(zhí)行業(yè)務(wù)邏輯會(huì)進(jìn)入某個(gè)Session的Event事件,Event執(zhí)行該標(biāo)簽內(nèi)部的屬性Handler,Handler有4種屬性:Session、Event、Ref、Method,Session和Event構(gòu)成一種Handler,這種Handler用于XML內(nèi)部的標(biāo)簽跳轉(zhuǎn),Ref和Method構(gòu)成的Handler用于調(diào)用函數(shù)動(dòng)態(tài)鏈接庫(kù),銜接底層平臺(tái)的數(shù)據(jù)處理。CN平臺(tái)向外部發(fā)送呼叫請(qǐng)求消息,外部某個(gè)實(shí)體請(qǐng)求后會(huì)給CN發(fā)送響應(yīng),CN收到響應(yīng)后,會(huì)觸發(fā)該Session的某Event事件,比如SIP事件,一次SIP請(qǐng)求后,CN收到SIP響應(yīng),相應(yīng)的Event標(biāo)簽里面的屬性為Sip.message的事件被觸發(fā),執(zhí)行該標(biāo)簽內(nèi)部的Handler,依次按照邏輯流程進(jìn)行。除了順序執(zhí)行的方式以外,還支持Case的分支選擇,發(fā)生跳轉(zhuǎn),使業(yè)務(wù)邏輯多樣化。Case節(jié)點(diǎn)某個(gè)Handler執(zhí)行之后的一個(gè)邏輯分支,Case下通過配置一個(gè)或多個(gè)Handler來執(zhí)行分支邏輯。以實(shí)現(xiàn)業(yè)務(wù)邏輯的多樣化。
1.3 XJOIN的Controller模塊
圖2 XML內(nèi)部結(jié)構(gòu)圖
XJOIN的視圖部分直觀反映業(yè)務(wù)邏輯的處理流程,Controller模塊實(shí)現(xiàn)按照視圖的編寫,控制業(yè)務(wù)邏輯走向,Controller采用事件觸發(fā)的機(jī)制控制數(shù)據(jù)流走向,被觸發(fā)的事件分為3種:初始事件、外部事件和內(nèi)部事件。
每個(gè)事件都由視圖部分的Event節(jié)點(diǎn)表示。初始事件是一次業(yè)務(wù)邏輯的最初始入口,即View模塊的Application節(jié)點(diǎn)表示,XJOIN根據(jù)IIP系統(tǒng)的一個(gè)自動(dòng)機(jī)所攜帶的消息內(nèi)部的業(yè)務(wù)鍵(ServiceKey),找到相應(yīng)的Application,觸發(fā)該業(yè)務(wù)邏輯,初始化業(yè)務(wù)上下文。外部事件是一次通用協(xié)議事件的觸發(fā),比如一次SIP呼叫,觸發(fā)業(yè)務(wù)邏輯的一個(gè)分支,外部事件處理每次外部呼叫事件的觸發(fā)。內(nèi)部事件是視圖內(nèi)部,邏輯流程的跳轉(zhuǎn),內(nèi)部邏輯跳轉(zhuǎn)支持順序,選擇和分支跳轉(zhuǎn),其中內(nèi)部事件用于控制程序內(nèi)部分支和各個(gè)Session之間的執(zhí)行順序。
2.1 業(yè)務(wù)平臺(tái)的工作流程
圖3 業(yè)務(wù)平臺(tái)工作流程
(1)如圖3所示,業(yè)務(wù)平臺(tái)在啟動(dòng)的時(shí)候加載了觸發(fā)事件配置及業(yè)務(wù)流程配置,根據(jù)流程配置找到涉及到的業(yè)務(wù)處理動(dòng)態(tài)鏈接庫(kù)文件,完成動(dòng)態(tài)庫(kù)的加載操作,并將業(yè)務(wù)流程中的事件信息與動(dòng)態(tài)鏈接庫(kù)中的處理函數(shù)做關(guān)聯(lián)。平臺(tái)收到外部實(shí)體發(fā)來的首條消息后,生成自動(dòng)機(jī)來保存此次呼叫的相關(guān)數(shù)據(jù),并生成消息對(duì)應(yīng)的事件交由XJOIN模塊處理。(2)XJOIN模塊根據(jù)事件,從業(yè)務(wù)觸發(fā)事件配置中,找到該事件對(duì)應(yīng)的應(yīng)用名,并將該應(yīng)用與自動(dòng)機(jī)關(guān)聯(lián)起來;之后,根據(jù)應(yīng)用名從加載的流程配置中找到對(duì)應(yīng)的業(yè)務(wù)流程,并從該業(yè)務(wù)流程中找到事件對(duì)應(yīng)的處理函數(shù),開始處理此消息。(3)處理函數(shù)過程中,可調(diào)用平臺(tái)提供的業(yè)務(wù)API指示平臺(tái)進(jìn)行消息數(shù)據(jù)獲取和保存,生成消息以及與發(fā)送消息等操作。(4)平臺(tái)收到非首條消息后,會(huì)直接生成事件交由XJOIN處理。(5)XJOIN模塊自動(dòng)根據(jù)自動(dòng)機(jī)對(duì)應(yīng)的應(yīng)用名,直接找到對(duì)應(yīng)的業(yè)務(wù)流程,并從業(yè)務(wù)流程中找到事件對(duì)應(yīng)的處理函數(shù)來處理。
2.2 業(yè)務(wù)發(fā)送消息基本步驟
圖4 消息的處理過程
業(yè)務(wù)邏輯中有多個(gè)Session,一個(gè)Session會(huì)與外部通過多次消息傳遞來交互,如圖4所示,XJOIN模塊按照如下步驟完成Session中一次消息的發(fā)送。
(1)創(chuàng)建消息的內(nèi)存區(qū),內(nèi)存區(qū)里的消息隊(duì)列存放初始消息,根據(jù)業(yè)務(wù)View模塊讀取的業(yè)務(wù)流程處理消息。(2)利用平臺(tái)底層提供的應(yīng)用程序接口,完成消息頭的組裝和消息體內(nèi)部參數(shù)的設(shè)置。(3)調(diào)用平臺(tái)底層發(fā)送消息的接口發(fā)送消息,完成一個(gè)Session的一次收發(fā)消息交互。
3.1 視圖層和業(yè)務(wù)層分離
允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個(gè)應(yīng)用的業(yè)務(wù)流程或者業(yè)務(wù)規(guī)則的改變只需要改動(dòng)XJOIN的模型層即可。模型與控制器和視圖相分離,所以很容易改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則。XJOIN模型是自包含的,并且與控制器和視圖相分離,所以很容易改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則。一旦正確的實(shí)現(xiàn)了模型,不管數(shù)據(jù)來自CN中的哪個(gè)狀態(tài)機(jī),視圖能正確的顯示它們。實(shí)現(xiàn)了構(gòu)造良好的松耦合的構(gòu)件,重用性高。
3.2 XJOIN模式允許用各種不同樣式的視圖編寫業(yè)務(wù)代碼
多個(gè)視圖能共享一個(gè)模型,對(duì)于不同的狀態(tài)機(jī),只需要提供相應(yīng)的標(biāo)識(shí)和輸入數(shù)據(jù),就可以通過XJOIN的控制器,控制不同的業(yè)務(wù)流程文件來處理業(yè)務(wù),獲得相應(yīng)的處理結(jié)果。由于已經(jīng)將數(shù)據(jù)和業(yè)務(wù)規(guī)則從表示層分開,所以可以最大化的重用代碼了。模型也有狀態(tài)管理和數(shù)據(jù)持久性處理的功能。
3.3 XJOIN框架的特色
(1)IIP-CN框架的XJOIN模塊可以為一個(gè)呼叫的數(shù)據(jù)在平臺(tái)運(yùn)行時(shí)同時(shí)建立和使用多個(gè)業(yè)務(wù)處理邏輯。變化傳播機(jī)制可以確保所有相關(guān)的業(yè)務(wù)及時(shí)得到模型數(shù)據(jù)變化,從而使所有關(guān)聯(lián)的業(yè)務(wù)文件和XJOIN模塊的控制器做到行為同步。業(yè)務(wù)文件與控制器的可接插性,允許更換業(yè)務(wù)和控制器對(duì)象,而且可以根據(jù)需求從業(yè)務(wù)動(dòng)態(tài)庫(kù)里動(dòng)態(tài)的打開或關(guān)閉、甚至在運(yùn)行期間進(jìn)行對(duì)象替換。模型的可移植性,因?yàn)槟P褪仟?dú)立于視圖的,所以可以把一個(gè)模型獨(dú)立地移植到新的平臺(tái)工作。需要做的只是在新平臺(tái)上對(duì)業(yè)務(wù)和控制器進(jìn)行新的修改。(2)采用C++語言實(shí)現(xiàn),利用動(dòng)態(tài)加載技術(shù)實(shí)現(xiàn)代碼動(dòng)態(tài)編寫,保證了作為后臺(tái)的系統(tǒng)平臺(tái)數(shù)據(jù)處理速度,同時(shí)可以動(dòng)態(tài)生成對(duì)象,提高代碼的可用程度,縮小代碼編寫量。(3)采用動(dòng)態(tài)鏈接技術(shù),靜態(tài)鏈接使得不同的程序開發(fā)者和部門能夠相對(duì)獨(dú)立地開發(fā)和測(cè)試自己的程序模塊,從某種意義上來講大大促進(jìn)了程序的開發(fā)效率,原先限制程序的規(guī)模也隨之?dāng)U大。但是慢慢地靜態(tài)鏈接的諸多缺點(diǎn)也逐步暴露出來,比如浪費(fèi)內(nèi)存和磁盤空間、模塊更新困難等問題,使得人們不得不尋找一種更好的方式來組織程序的模塊。要解決空間浪費(fèi)和更新困難這兩個(gè)問題最簡(jiǎn)單的辦法就是把程序的模塊相互劃分開來,形成獨(dú)立的文件,而不再將他們靜態(tài)的鏈接在一起。簡(jiǎn)單地講,就是不對(duì)那些組成程序的目標(biāo)文件進(jìn)行鏈接,等到程序要運(yùn)行時(shí)才進(jìn)行鏈接。
Design and implementation of IIP system XJOIN framework
ZHANG Meng, ZHU Xiao-min
(1 Beijing University of Posts and Telecommunications Networking and Switching Technology, State Key Laboratory, Beijing 100876, China; 2 EBUPT Information Technology Co., Ltd., Beijing 100191, China)
IIP system is one of the important functional entities in the intelligent network to perform a special resource function SRF and to provide terminal users in the intelligent network with a variety of special resource services. At present, there are two platform products of the IIP system: CN and the NCSP-AS. However, the two platforms with a variety of special in technologies and developing languages result in a redundancy and waste of software products as well as human resources. Therefore, a new platform product: a media service platform which combines the capacities and advantages of the two products mentioned above is in urgent need. In this paper, the writer illustrates how he uses the MVC design mode to realize the XJOIN structure based on the architecture of CN and the service load mode in NCSPAS platform, and achieve the goal of separating service logic and platform data and completing the integration of the service load module in the two platforms.
IIP; MVC; XJOIN
TN915
A
1008-5599(2014)12-0079-04
2014-11-01
國(guó)家973計(jì)劃項(xiàng)目(編號(hào):2013CB329102);國(guó)家自然科學(xué)基金資助項(xiàng)目(No. 61372120, 61271019, 61101119, 61121001);長(zhǎng)江學(xué)者和創(chuàng)新團(tuán)隊(duì)發(fā)展計(jì)劃資助(編號(hào):IRT1049);教育部科學(xué)技術(shù)研究重點(diǎn)(重大)項(xiàng)目資助(編號(hào):MCM20130310);北京高等學(xué)校青年英才計(jì)劃項(xiàng)目(編號(hào):YETP0473)。