李雪玲
摘要摘要:在介紹ICE中間件的基礎(chǔ)上,提出了基于ICE的應(yīng)用系統(tǒng)通信框架設(shè)計(jì)方案。該框架負(fù)責(zé)系統(tǒng)各部分之間的通信,在此框架基礎(chǔ)上可以進(jìn)一步擴(kuò)展系統(tǒng)功能。
關(guān)鍵詞關(guān)鍵詞:ICE中間件;應(yīng)用系統(tǒng);通信框架
DOIDOI:10.11907/rjdk.162129
中圖分類(lèi)號(hào):TP319文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2017)001009102
0引言
中間件是位于客戶(hù)機(jī)/服務(wù)器的操作系統(tǒng)之上的服務(wù)程序,這些服務(wù)程序具備標(biāo)準(zhǔn)的接口和協(xié)議。相連接的系統(tǒng)即使是不同的OS和硬件,也可以有符合對(duì)應(yīng)接口和協(xié)議規(guī)范的實(shí)現(xiàn)方式。在具體應(yīng)用程序的開(kāi)發(fā)過(guò)程中,利用中間件提供的跨平臺(tái)、統(tǒng)一的接口來(lái)屏蔽操作系統(tǒng)的多樣化,以此實(shí)現(xiàn)穩(wěn)定、安全的支撐平臺(tái),從而在異構(gòu)系統(tǒng)間進(jìn)行信息交換[1]。當(dāng)前主流的面向?qū)ο笾虚g件包括Sun公司的EJB/J2EE、Microsoft的COM+/DNA和OMG的CORBA/OMA等,都有其各自的特點(diǎn)。ZeroC公司于2003 年開(kāi)發(fā)了一種新的輕量級(jí)面向?qū)ο蟮姆植际街虚g件ICE ( Internet Communication Engine)[2]。1ICE中間件簡(jiǎn)介
ICE 作為中間件平臺(tái)為構(gòu)建面向?qū)ο蟮目蛻?hù)/服務(wù)器應(yīng)用提供支持[3]。通過(guò)Slice (Specification Language for Ice)語(yǔ)言來(lái)描述(不是實(shí)現(xiàn))各種類(lèi)型和對(duì)象接口,再由編譯器編譯到特定實(shí)現(xiàn)語(yǔ)言的類(lèi)型定義和API,使用其提供的應(yīng)用功能,并與ICE進(jìn)行交互。由于這種抽象機(jī)制,它提供了跨平臺(tái)、跨語(yǔ)言的解決方案:客戶(hù)端和服務(wù)器端可以用不同的編程語(yǔ)言來(lái)實(shí)現(xiàn),可以在多種操作系統(tǒng)和硬件架構(gòu)上運(yùn)行,并可以采用不同的網(wǎng)絡(luò)通信技術(shù)[4]。目前,最新版本為3.6(ICE-3.6.2在2016年4月發(fā)布),支持C++、JAVA、JavaScript、VB、C#、PHP、Ruby、Python等編程語(yǔ)言,并可支持Windows、Unix、Linux、Solaris、OS X等操作系統(tǒng)。
ICE程序是C/S架構(gòu)的程序,由客戶(hù)端和服務(wù)器端組成,其內(nèi)部邏輯結(jié)構(gòu)如圖1所示。客戶(hù)端與服務(wù)器端程序都是由應(yīng)用代碼(客戶(hù)應(yīng)用和服務(wù)器應(yīng)用)、庫(kù)代碼(客戶(hù) ICE 核心、服務(wù)器ICE核心和對(duì)象適配)以及根據(jù)Slice語(yǔ)言定義生成的代碼(代理和骨架)混合而成[5]。
2.2通信接口定義
在傳統(tǒng)的網(wǎng)絡(luò)應(yīng)用系統(tǒng)開(kāi)發(fā)中,開(kāi)發(fā)者需要花費(fèi)大量時(shí)間用于底層通信程序的實(shí)現(xiàn)。例如根據(jù)客戶(hù)端和服務(wù)器端各自的操作系統(tǒng)選用與之對(duì)應(yīng)的SOCKET庫(kù)和API,還需考慮采用TCP或UDP協(xié)議進(jìn)行通訊時(shí)的實(shí)現(xiàn)細(xì)節(jié)等。本文研究的基于ICE中間件的通信框架(見(jiàn)圖2)可以便利地實(shí)現(xiàn)應(yīng)用程序間的通信與數(shù)據(jù)傳輸,程序間通信的接口(圖中帶數(shù)字的圓圈)由ICE的SLICE語(yǔ)言定義,對(duì)通信雙方是透明的。其中,端口1、3、5、7是程序作為ICE通信的發(fā)起端時(shí)操作系統(tǒng)為其分配的端口號(hào)(每次通信可能會(huì)不一樣);端口2、4、6、8是程序作為ICE通信的接收端時(shí)用于監(jiān)聽(tīng)的端口號(hào)(固定、唯一的)。
程序中,首先聲明一個(gè)類(lèi)型為 Ice::Communicator 的 AppSysIC 變量,通過(guò)調(diào)用Ice::initialize進(jìn)行初始化,返回一個(gè)指向Ice::Communicator對(duì)象的指針;接著調(diào)用 Communicator 實(shí)例的AppSys AdapterCmd,創(chuàng)建一個(gè)操作命令適配器,用于監(jiān)聽(tīng)用戶(hù)操作請(qǐng)求,并調(diào)用Communicator 實(shí)例的AppSys AdapterData,創(chuàng)建一個(gè)數(shù)據(jù)傳輸適配器,用于監(jiān)聽(tīng)用戶(hù)的數(shù)據(jù)傳輸請(qǐng)求;實(shí)例化AppSysWorkI對(duì)象,創(chuàng)建Servant;將實(shí)例化的Servant作為參數(shù)傳遞給適配器的add方法;調(diào)用適配器的activate方法激活適配器,服務(wù)器則開(kāi)始處理來(lái)自客戶(hù)端的請(qǐng)求;最后,通過(guò)調(diào)用wait For Shutdown方法掛起發(fā)出調(diào)用的線程,直至終止。