李雪玲

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