張萌,朱曉民
(1 北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國家重點實驗室,北京 100876; 2 東信北郵信息技術(shù)有限公司,北京 100191)
IIP系統(tǒng)XJOIN框架的設(shè)計與實現(xiàn)*
張萌1,2,朱曉民1,2
(1 北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國家重點實驗室,北京 100876; 2 東信北郵信息技術(shù)有限公司,北京 100191)
獨立智能外設(shè)(IIP)系統(tǒng)是智能網(wǎng)中重要的功能實體之一,完成特殊資源功能(SRF),向智能網(wǎng)的終端用戶提供各種的專用資源服務(wù)?,F(xiàn)有兩套IIP系統(tǒng)平臺產(chǎn)品:控制節(jié)點(CN)和下一代核心業(yè)務(wù)平臺——應(yīng)用服務(wù)器(NCSP-AS),二者在能力上有較多重疊,但由于技術(shù)實現(xiàn)和開發(fā)語言上的差異,需要各自設(shè)立相關(guān)的開發(fā)和維護人員,造成了人力使用和軟件維護成本的浪費。針對這一問題,本文集合原有平臺能力和優(yōu)點設(shè)計了新產(chǎn)品——媒體業(yè)務(wù)平臺。該平臺基于CN平臺底層架構(gòu)和NCSP-AS平臺的業(yè)務(wù)加載模式,運用MVC設(shè)計模式,實現(xiàn)XJOIN框架,達到業(yè)務(wù)邏輯和平臺數(shù)據(jù)的顯示分離,完成兩套平臺業(yè)務(wù)加載模塊的融合。
IIP;MVC;XJOIN
獨立智能外設(shè)(IIP,Independent Intelligent Peripheral)系統(tǒng)充分借鑒CTI技術(shù)發(fā)展的最新成果;采用高可靠性、高性能主機系統(tǒng)和高性能的國外成熟資源板卡;吸收國際上軟件體系結(jié)構(gòu)最新思想,采用多層體系結(jié)構(gòu),實現(xiàn)軟件系統(tǒng)的穩(wěn)健性、易擴展性和高性能;采用完整的面向?qū)ο蟮乃枷搿⒐ぞ?,分析、設(shè)計、實現(xiàn)和部署。系統(tǒng)具有完整的信令接口,支持多種組網(wǎng)方式,采用的是集中控制的分布處理方式,向智能網(wǎng)的終端用戶提供各種的專用資源服務(wù),系統(tǒng)具有完整的信令接口,支持多種組網(wǎng)方式,采用的是集中控制的分布處理方式,從功能角度看,本系統(tǒng)主要由控制節(jié)點(CN)、資源節(jié)點(RN)、信令節(jié)點和維護系統(tǒng)組成。
媒體業(yè)務(wù)平臺CN由高性能計算機服務(wù)器構(gòu)成,它集中控制并管理所有資源,是整個獨立智能外設(shè)的靈魂,同時提供與SMP和網(wǎng)管等的接口?;谠瑿N、NCSP-AS兩個平臺的優(yōu)勢和特點,并充分調(diào)研電信、互聯(lián)網(wǎng)業(yè)務(wù)模式發(fā)展的趨勢,網(wǎng)絡(luò)發(fā)展的趨勢,整理出NCSP-AS在能力(業(yè)務(wù)開發(fā)、基礎(chǔ)功能、接入?yún)f(xié)議等)、操作維護(安裝部署、操作手段等)、性能、架構(gòu)(可擴展行、穩(wěn)定性等)等方面的需求,在新系統(tǒng)中得以實現(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é)議存儲數(shù)據(jù)字段需頻繁更改底層代碼,開發(fā)極其不便利,所以本論文設(shè)計開發(fā)XJOIN框架替代IIP-CN構(gòu)架中的SLP,用XJOIN來處理CN中事件觸發(fā)業(yè)務(wù)部分,并提供簡單易懂的接口和語法規(guī)則來讓業(yè)務(wù)人員進行業(yè)務(wù)邏輯開發(fā)和設(shè)計。
1.1 XJOIN模塊總體架構(gòu)
圖1 XJOIN模塊內(nèi)部結(jié)構(gòu)圖
XJOIN框架嵌入CN系統(tǒng)中,以CN后臺為控制臺,以CN編解碼一次呼叫為模型,以業(yè)務(wù)邏輯開發(fā)的XML文檔為視圖的用C++語言開發(fā)的基于MVC設(shè)計模式的框架。下面從MVC設(shè)計模式的模塊、視圖和控制3部分介紹圖1所示的XJOIN的總體架構(gòu):XjoinService模塊是模塊部分,用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對數(shù)據(jù)的處理方法。XJOIN的模塊部分(XjoinService)提供經(jīng)過協(xié)議解析,消息處理等的固定數(shù)據(jù),如每次呼叫的主被叫號碼,定制的業(yè)務(wù)等。Application標簽節(jié)點是視圖XML的根節(jié)點,業(yè)務(wù)邏輯的觸發(fā)從Application開始執(zhí)行,XML以動態(tài)鏈接庫的方式訪問它所監(jiān)視的數(shù)據(jù)模型(Model),獲得底層實時提供的原始數(shù)據(jù)資源。Application標簽節(jié)點下面,有Event標簽節(jié)點,控制器通過Event來起到不同層面間的組織作用,用于控制應(yīng)用程序的流程,它處理事件并做出響應(yīng)?!笆录卑ㄓ脩舻男袨楹蛿?shù)據(jù)模型上的改變。
1.2 XJOIN的View模塊
該模塊通過實現(xiàn)XML業(yè)務(wù)邏輯文件的讀取和存儲,設(shè)計View視圖的數(shù)據(jù)結(jié)構(gòu)。如圖2所示:業(yè)務(wù)邏輯有一個根節(jié)點,標簽名字為Application,Application節(jié)點包含Session和Event節(jié)點,業(yè)務(wù)一般從Application根節(jié)點的配置開始,按照樹的結(jié)構(gòu),逐個配置子Session。Session節(jié)點代表一個會話,在一次業(yè)務(wù)邏輯里,可以有多方會話,會話之間可以發(fā)送請求消息。響應(yīng)消息以事件的形式完成業(yè)務(wù)邏輯的執(zhí)行,每個Session里面通常配置一組相關(guān)的Event及Event包含的Handler組成。Session還支持嵌套結(jié)構(gòu),一般為兩層。在配置的時候,可以根據(jù)業(yè)務(wù)邏輯或者所處理的具體協(xié)議的會話關(guān)系來劃分不同的Session。當觸發(fā)業(yè)務(wù)邏輯根節(jié)點后,順序執(zhí)行業(yè)務(wù)邏輯會進入某個Session的Event事件,Event執(zhí)行該標簽內(nèi)部的屬性Handler,Handler有4種屬性:Session、Event、Ref、Method,Session和Event構(gòu)成一種Handler,這種Handler用于XML內(nèi)部的標簽跳轉(zhuǎn),Ref和Method構(gòu)成的Handler用于調(diào)用函數(shù)動態(tài)鏈接庫,銜接底層平臺的數(shù)據(jù)處理。CN平臺向外部發(fā)送呼叫請求消息,外部某個實體請求后會給CN發(fā)送響應(yīng),CN收到響應(yīng)后,會觸發(fā)該Session的某Event事件,比如SIP事件,一次SIP請求后,CN收到SIP響應(yīng),相應(yīng)的Event標簽里面的屬性為Sip.message的事件被觸發(fā),執(zhí)行該標簽內(nèi)部的Handler,依次按照邏輯流程進行。除了順序執(zhí)行的方式以外,還支持Case的分支選擇,發(fā)生跳轉(zhuǎn),使業(yè)務(wù)邏輯多樣化。Case節(jié)點某個Handler執(zhí)行之后的一個邏輯分支,Case下通過配置一個或多個Handler來執(zhí)行分支邏輯。以實現(xiàn)業(yè)務(wù)邏輯的多樣化。
1.3 XJOIN的Controller模塊
圖2 XML內(nèi)部結(jié)構(gòu)圖
XJOIN的視圖部分直觀反映業(yè)務(wù)邏輯的處理流程,Controller模塊實現(xiàn)按照視圖的編寫,控制業(yè)務(wù)邏輯走向,Controller采用事件觸發(fā)的機制控制數(shù)據(jù)流走向,被觸發(fā)的事件分為3種:初始事件、外部事件和內(nèi)部事件。
每個事件都由視圖部分的Event節(jié)點表示。初始事件是一次業(yè)務(wù)邏輯的最初始入口,即View模塊的Application節(jié)點表示,XJOIN根據(jù)IIP系統(tǒng)的一個自動機所攜帶的消息內(nèi)部的業(yè)務(wù)鍵(ServiceKey),找到相應(yīng)的Application,觸發(fā)該業(yè)務(wù)邏輯,初始化業(yè)務(wù)上下文。外部事件是一次通用協(xié)議事件的觸發(fā),比如一次SIP呼叫,觸發(fā)業(yè)務(wù)邏輯的一個分支,外部事件處理每次外部呼叫事件的觸發(fā)。內(nèi)部事件是視圖內(nèi)部,邏輯流程的跳轉(zhuǎn),內(nèi)部邏輯跳轉(zhuǎn)支持順序,選擇和分支跳轉(zhuǎn),其中內(nèi)部事件用于控制程序內(nèi)部分支和各個Session之間的執(zhí)行順序。
2.1 業(yè)務(wù)平臺的工作流程
圖3 業(yè)務(wù)平臺工作流程
(1)如圖3所示,業(yè)務(wù)平臺在啟動的時候加載了觸發(fā)事件配置及業(yè)務(wù)流程配置,根據(jù)流程配置找到涉及到的業(yè)務(wù)處理動態(tài)鏈接庫文件,完成動態(tài)庫的加載操作,并將業(yè)務(wù)流程中的事件信息與動態(tài)鏈接庫中的處理函數(shù)做關(guān)聯(lián)。平臺收到外部實體發(fā)來的首條消息后,生成自動機來保存此次呼叫的相關(guān)數(shù)據(jù),并生成消息對應(yīng)的事件交由XJOIN模塊處理。(2)XJOIN模塊根據(jù)事件,從業(yè)務(wù)觸發(fā)事件配置中,找到該事件對應(yīng)的應(yīng)用名,并將該應(yīng)用與自動機關(guān)聯(lián)起來;之后,根據(jù)應(yīng)用名從加載的流程配置中找到對應(yīng)的業(yè)務(wù)流程,并從該業(yè)務(wù)流程中找到事件對應(yīng)的處理函數(shù),開始處理此消息。(3)處理函數(shù)過程中,可調(diào)用平臺提供的業(yè)務(wù)API指示平臺進行消息數(shù)據(jù)獲取和保存,生成消息以及與發(fā)送消息等操作。(4)平臺收到非首條消息后,會直接生成事件交由XJOIN處理。(5)XJOIN模塊自動根據(jù)自動機對應(yīng)的應(yīng)用名,直接找到對應(yīng)的業(yè)務(wù)流程,并從業(yè)務(wù)流程中找到事件對應(yīng)的處理函數(shù)來處理。
2.2 業(yè)務(wù)發(fā)送消息基本步驟
圖4 消息的處理過程
業(yè)務(wù)邏輯中有多個Session,一個Session會與外部通過多次消息傳遞來交互,如圖4所示,XJOIN模塊按照如下步驟完成Session中一次消息的發(fā)送。
(1)創(chuàng)建消息的內(nèi)存區(qū),內(nèi)存區(qū)里的消息隊列存放初始消息,根據(jù)業(yè)務(wù)View模塊讀取的業(yè)務(wù)流程處理消息。(2)利用平臺底層提供的應(yīng)用程序接口,完成消息頭的組裝和消息體內(nèi)部參數(shù)的設(shè)置。(3)調(diào)用平臺底層發(fā)送消息的接口發(fā)送消息,完成一個Session的一次收發(fā)消息交互。
3.1 視圖層和業(yè)務(wù)層分離
允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應(yīng)用的業(yè)務(wù)流程或者業(yè)務(wù)規(guī)則的改變只需要改動XJOIN的模型層即可。模型與控制器和視圖相分離,所以很容易改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則。XJOIN模型是自包含的,并且與控制器和視圖相分離,所以很容易改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則。一旦正確的實現(xiàn)了模型,不管數(shù)據(jù)來自CN中的哪個狀態(tài)機,視圖能正確的顯示它們。實現(xiàn)了構(gòu)造良好的松耦合的構(gòu)件,重用性高。
3.2 XJOIN模式允許用各種不同樣式的視圖編寫業(yè)務(wù)代碼
多個視圖能共享一個模型,對于不同的狀態(tài)機,只需要提供相應(yīng)的標識和輸入數(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模塊可以為一個呼叫的數(shù)據(jù)在平臺運行時同時建立和使用多個業(yè)務(wù)處理邏輯。變化傳播機制可以確保所有相關(guān)的業(yè)務(wù)及時得到模型數(shù)據(jù)變化,從而使所有關(guān)聯(lián)的業(yè)務(wù)文件和XJOIN模塊的控制器做到行為同步。業(yè)務(wù)文件與控制器的可接插性,允許更換業(yè)務(wù)和控制器對象,而且可以根據(jù)需求從業(yè)務(wù)動態(tài)庫里動態(tài)的打開或關(guān)閉、甚至在運行期間進行對象替換。模型的可移植性,因為模型是獨立于視圖的,所以可以把一個模型獨立地移植到新的平臺工作。需要做的只是在新平臺上對業(yè)務(wù)和控制器進行新的修改。(2)采用C++語言實現(xiàn),利用動態(tài)加載技術(shù)實現(xiàn)代碼動態(tài)編寫,保證了作為后臺的系統(tǒng)平臺數(shù)據(jù)處理速度,同時可以動態(tài)生成對象,提高代碼的可用程度,縮小代碼編寫量。(3)采用動態(tài)鏈接技術(shù),靜態(tài)鏈接使得不同的程序開發(fā)者和部門能夠相對獨立地開發(fā)和測試自己的程序模塊,從某種意義上來講大大促進了程序的開發(fā)效率,原先限制程序的規(guī)模也隨之擴大。但是慢慢地靜態(tài)鏈接的諸多缺點也逐步暴露出來,比如浪費內(nèi)存和磁盤空間、模塊更新困難等問題,使得人們不得不尋找一種更好的方式來組織程序的模塊。要解決空間浪費和更新困難這兩個問題最簡單的辦法就是把程序的模塊相互劃分開來,形成獨立的文件,而不再將他們靜態(tài)的鏈接在一起。簡單地講,就是不對那些組成程序的目標文件進行鏈接,等到程序要運行時才進行鏈接。
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
國家973計劃項目(編號:2013CB329102);國家自然科學(xué)基金資助項目(No. 61372120, 61271019, 61101119, 61121001);長江學(xué)者和創(chuàng)新團隊發(fā)展計劃資助(編號:IRT1049);教育部科學(xué)技術(shù)研究重點(重大)項目資助(編號:MCM20130310);北京高等學(xué)校青年英才計劃項目(編號:YETP0473)。