晉良銀 黎明 茍江 趙斌 何娣
摘要:將ICE中間件的雙向連接機(jī)制引入衛(wèi)星空地通信系統(tǒng)中,并給出了一種基于ICE雙向連接的衛(wèi)星空地通信系統(tǒng)設(shè)計(jì)方案,討論了ICE中間件相關(guān)概念,介紹了ICE的雙向連接功能及原理。在衛(wèi)星通信網(wǎng)絡(luò)環(huán)境下進(jìn)行設(shè)計(jì)、實(shí)現(xiàn)與測試,并分析了系統(tǒng)測試結(jié)果,測試結(jié)果表明ICE雙向連接可以解決衛(wèi)星空地鏈路單向連接的問題。
關(guān)鍵詞:ICE中間件;雙向連接;機(jī)載客艙系統(tǒng);單向連接
中圖分類號(hào):TP393文獻(xiàn)標(biāo)志碼:A文章編號(hào):1008-1739(2019)09-69-3
0引言
目前,機(jī)載客艙系統(tǒng)與地面航空公司空地通信主要有ATG和衛(wèi)星通信等方式,本文僅討論衛(wèi)星通信鏈路下機(jī)載客艙系統(tǒng)與地面的空地通信。在應(yīng)用中,客艙系統(tǒng)通過衛(wèi)星接入公網(wǎng)與航空公司進(jìn)行通信,通信協(xié)議采用TCP/IP。航空公司的服務(wù)器具有公網(wǎng)IP地址,但衛(wèi)星通信系統(tǒng)分配給客艙系統(tǒng)的地址是私有IP。在初始化狀態(tài)下,客艙系統(tǒng)可以向航空公司發(fā)起連接請(qǐng)求,但航空公司卻無法主動(dòng)向客艙系統(tǒng)發(fā)起應(yīng)用連接。因此,客艙系統(tǒng)與地面的航空公司間的空地通信存在單向連接問題。
基于ICE中間件的雙向連接機(jī)制提供了一種新的思路。ICE中間件通過雙向連接機(jī)制首先由機(jī)載客艙系統(tǒng)向航空公司發(fā)起并建立連接,ICE保持并維護(hù)此連接,航空公司利用該連接可以向機(jī)載端發(fā)送消息。針對(duì)上述分析,設(shè)計(jì)了一種基于ICE雙向連接的衛(wèi)星空地通信系統(tǒng)方案,并給出其在衛(wèi)星通信環(huán)境下的測試結(jié)果。
1 ICE中間件
ICE中間件是ZeroC公司開發(fā)的一款開源面向?qū)ο蟮暮唵胃咝У闹虚g件平臺(tái)[1],借鑒了CORBA,DCOM,SOAP等中間件的優(yōu)點(diǎn),并解決了這些中間件的應(yīng)用局限[5]。ICE提供了建立面向?qū)ο蟮目蛻?服務(wù)端應(yīng)用程序所需要的工具、API和類庫,使得分布式客戶/服務(wù)端應(yīng)用程序的建立變得簡單[6]。而且ICE應(yīng)用適合在異種環(huán)境中使用,客戶端和服務(wù)端可以使用不同的編程語言來實(shí)現(xiàn),同時(shí)它可以運(yùn)行在不同的操作系統(tǒng)平臺(tái)以及不同的硬件架構(gòu)上,有效地解決了C/S模式兼容性差、開發(fā)成本高以及開發(fā)周期長等問題[7]。ICE支持多種網(wǎng)絡(luò)信息交互技術(shù)(TCP/UDP、SSL、通過插件功能擴(kuò)展協(xié)議)。
2 ICE雙向連接
ICE連接通常允許請(qǐng)求僅在一個(gè)方向上流動(dòng)。如果應(yīng)用程序的設(shè)計(jì)要求服務(wù)器向客戶端進(jìn)行回調(diào),則服務(wù)器通常會(huì)建立與該客戶端的新連接以發(fā)送回調(diào)請(qǐng)求,該請(qǐng)求過程如圖1所示。
但是在實(shí)際的網(wǎng)絡(luò)環(huán)境中,網(wǎng)絡(luò)限制通常會(huì)阻止服務(wù)器創(chuàng)建與客戶端的單獨(dú)連接,例如當(dāng)客戶端位于防火墻后面,如圖2所示。
在這種情況下,防火墻會(huì)阻止任何直接與客戶端建立連接的嘗試。此時(shí),雙向連接提供了一種解決方案。請(qǐng)求可以在雙向連接上雙向流動(dòng),使服務(wù)器能夠通過客戶端到服務(wù)器的現(xiàn)有連接向客戶端發(fā)送回調(diào)請(qǐng)求。有2種方式使用雙向連接:①使用ICE的Glacier功能,在這種情況下,雙向連接被自動(dòng)使用;②手動(dòng)配置雙向連接,使用ICE雙向連接的手動(dòng)配置方式解決衛(wèi)通空地單向連接的問題。
3系統(tǒng)設(shè)計(jì)與測試
3.1系統(tǒng)架構(gòu)
基于ICE雙向連接的衛(wèi)星空地通信系統(tǒng)架構(gòu)示意圖如圖3所示。系統(tǒng)中的各功能模塊采用分布式部署,主要由3部分組成:模擬機(jī)載客艙系統(tǒng)的客戶端(Client)、模擬地面航空公司的服務(wù)器端(Server)以及衛(wèi)星通信設(shè)備。地面服務(wù)器端的IP地址是公網(wǎng)地址,而機(jī)載客戶端的IP地址是衛(wèi)星通信系統(tǒng)分配的私網(wǎng)地址。因此,在實(shí)際通信中,Client可以訪問到Server,但Server無法訪問Client。針對(duì)上述問題,本文引入ICE雙向連接機(jī)制實(shí)現(xiàn)空地之間的雙向通信。
3.2 ICE安裝及開發(fā)環(huán)境配置
該系統(tǒng)的Client與Server應(yīng)用在Centos7 64位操作系統(tǒng)下開發(fā)并運(yùn)行。ICE版本為3.5.1。Client與Server分別安裝在2臺(tái)不同的筆記本上。Client模擬機(jī)載客艙系統(tǒng)端(以下統(tǒng)稱機(jī)載端)使用衛(wèi)星通信系統(tǒng)分配的私有網(wǎng)IP地址,Server模擬航空公司地面端(以下統(tǒng)稱地面端)使用公網(wǎng)IP地址。地面端與機(jī)載端網(wǎng)絡(luò)配置如圖4所示。
Server的網(wǎng)絡(luò)配置包括3項(xiàng)內(nèi)容。TCP表示ICE通信遵循的TCP/IP協(xié)議;-h 218.104.XXX.XXX表示Server的IP地址為218.104.XXX.XXX;-p 10000表示Server監(jiān)聽端口為10000。機(jī)載端的網(wǎng)絡(luò)配置如圖5所示。
Client的網(wǎng)絡(luò)配置包括三項(xiàng)內(nèi)容。TCP表示ICE通信遵循的TCP/IP協(xié)議;-h 218.104.XXX.XXX表示Server的IP地址為218.104.XXX.XXX;-p 10000表示Client向Server的10000端口發(fā)送消息。
3.3 ICE客戶端開發(fā)
客戶端實(shí)現(xiàn)雙向連接需要執(zhí)行以下步驟:
①創(chuàng)建一個(gè)對(duì)象適配器接收回調(diào)請(qǐng)求;②使用對(duì)象適配器注冊回調(diào)對(duì)象;③激活對(duì)象適配器;④代理對(duì)象調(diào)用ICE_getconnection函數(shù),獲得連接對(duì)象。用獲得的連接對(duì)象,調(diào)用Setadapter函數(shù),傳遞給回調(diào)對(duì)象適配器;⑤向服務(wù)器傳遞回調(diào)對(duì)象的身份Identity。
據(jù)上述步驟,客戶端程序的主要代碼如下:
CallbackSenderPrx server=CallbackSenderPrx::checkedCast(communicator()->propertyToProxy("CallbackSender.Proxy")); ICE::ObjectAdapterPtr adapter=communicator()->createObject-Adapter("");
ICE::Identity ident;
ident.name = ICEUtil::generateUUID();
ident.category = "";
CallbackReceiverPtr cr = new CallbackReceiverI;
adapter->add(cr, ident);
adapter->activate();
server->ICE_getConnection()->setAdapter(adapter);
server->addclient(ident);
communicator()->waitForShutdown().
3.4 ICE服務(wù)器端開發(fā)
服務(wù)器端實(shí)現(xiàn)雙向連接需要執(zhí)行以下步驟:
①創(chuàng)建一個(gè)對(duì)象適配器用于調(diào)用客戶端的回調(diào)函數(shù);②使用對(duì)象適配器注冊請(qǐng)求對(duì)象;③激活對(duì)象適配器;④在請(qǐng)求對(duì)象中完成客戶端與服務(wù)器的連接,以及完成服務(wù)器端調(diào)用客戶端的回調(diào)函數(shù)。
根據(jù)上述步驟,服務(wù)器端程序的主要代碼如下:
Ice::ObjectAdapterPtr adapter= communicator()->createObjectAdapter("Callback.server");
CallbackSenderIPtr sender= new CallbackSenderI(communicator());
adapter->add(sender,communicator()->stringToIdentity("sender"));
adapter->activate(). 3.5測試結(jié)果
(1)首先啟動(dòng)模擬地面航空公司的Server;
(2)啟動(dòng)模擬機(jī)載客艙系統(tǒng)的Client。
Client啟動(dòng)后運(yùn)行結(jié)果如圖6所示。圖6中列出了Client接收請(qǐng)求和發(fā)送應(yīng)答的信息參數(shù),本文僅對(duì)Client接收請(qǐng)求中部分重要參數(shù)進(jìn)行簡要分析。Message Type為0表示Client接收到一條請(qǐng)求消息;Compression Status為0表示消息不壓縮;Message Size為105表示消息占用105Byte;request id為4表示當(dāng)前請(qǐng)求的標(biāo)示為4;Identity表示Server的UUID;Operation為Callback表示操作類型為回調(diào)操作;Receive Callback#后的字符串是Client接收Server利用雙向連接發(fā)送的信息。Client接收到Server發(fā)送的“This is a String Sending Test!”字符串。Server調(diào)用Client的回調(diào)函數(shù)成功。
(3)分析上述在衛(wèi)星通信網(wǎng)絡(luò)環(huán)境下的測試結(jié)果可知:①Server與Client啟動(dòng)正常;②Server與Client雙向連接建立成功;③Server利用ICE雙向連接功能向Client發(fā)送消息成功。
4結(jié)束語
本文討論了ICE中間件相關(guān)概念,介紹了ICE的雙向連接功能及原理。通過分析機(jī)載客艙系統(tǒng)與航空公司間的衛(wèi)星空地通信鏈路單向連接問題,提出了一種基于ICE中間件的衛(wèi)星空地通信系統(tǒng)的設(shè)計(jì)方案。該設(shè)計(jì)方案依托ICE中間件的雙向連接機(jī)制,實(shí)現(xiàn)了具有公有IP地址的地面端向具有私有IP地址的機(jī)載端發(fā)送消息,成功解決了目前衛(wèi)通空地通信鏈路單向連接的問題。在衛(wèi)星通信網(wǎng)絡(luò)環(huán)境下進(jìn)行了實(shí)驗(yàn)與測試,系統(tǒng)測試結(jié)果驗(yàn)證了方案的正確性。
參考文獻(xiàn)
[1]陳增孝,裘雪紅.面向?qū)ο蟮腎CE中間件系統(tǒng)設(shè)計(jì)[J].電子元器件應(yīng)用,2008,10(8):16-18,21.
[2]江卓逞,黃瑋.曾加剛.基于ICE中間件的分布式應(yīng)用開發(fā)研究[J].信息與電腦(理論版),2017(9):38-40.
[3]姜邵巍,朱建良,吳永勝.一種改進(jìn)的ICE中間件負(fù)載均衡算法[J].中國電子科學(xué)研究院學(xué)報(bào),2016,11(3):263-267.
[4]李雪玲.基于ICE中間件的應(yīng)用系統(tǒng)通信框架設(shè)計(jì)[J].軟件導(dǎo)刊,2017,16(1):91-93.
[5] Leader-us.ZeroC Ice權(quán)威指南[M].北京:電子工業(yè)出版社, 2015.
[6]王晨,賈卓生.基于ICE中間件的分布式網(wǎng)管系統(tǒng)的研究與設(shè)計(jì)[J].中國科技信息,2007(9):110-112.
[7]張俊軍,章旋.ICE中間件技術(shù)及其應(yīng)用研究[J].計(jì)算機(jī)與現(xiàn)代化,2012(5):192-194.
[8]陶雪蓮,周俊.基于ICE中間件的分布式衛(wèi)星地面測試系統(tǒng)研究[J].信息通信,2014(2):23-25.