李 哲,唐 穩(wěn),王福喜,王祥根
(華北計(jì)算技術(shù)研究所,北京100083)
0 引言
Adobe Flash是一種基于矢量圖片、位圖、音視頻及動(dòng)作腳本等元素的交互式多媒體技術(shù),已在互聯(lián)網(wǎng)、嵌入式設(shè)備等多種場(chǎng)合得到廣泛應(yīng)用。但是,由于Flash基于虛擬機(jī)執(zhí)行,因此其執(zhí)行效率較低,不能適用于數(shù)據(jù)處理等需要大量運(yùn)算的應(yīng)用場(chǎng)合。與之相反,原生Windows或Linux程序由于直接調(diào)用操作系統(tǒng)提供的底層API,因此具有很高的執(zhí)行效率,但是直接基于操作系統(tǒng)底層API或者利用集成界面開(kāi)發(fā)工具的Visual C++等軟件開(kāi)發(fā)圖形化人機(jī)交互界面的難度大,開(kāi)發(fā)周期長(zhǎng)。為了揚(yáng)長(zhǎng)避短,滿足用戶對(duì)系統(tǒng)界面效果和執(zhí)行效率的需求,實(shí)現(xiàn)原生Windows或Linux程序與Flash組件間的集成成為一種有效的解決方案。
近年來(lái),在原生桌面應(yīng)用程序中集成Flash組件實(shí)現(xiàn)軟件界面的開(kāi)發(fā)方式得到了越來(lái)越廣泛的應(yīng)用,尤其是在國(guó)產(chǎn)自主基礎(chǔ)軟件平臺(tái)環(huán)境下的圖形用戶界面應(yīng)用程序開(kāi)發(fā)領(lǐng)域。這種開(kāi)發(fā)方式能夠綜合原生桌面應(yīng)用程序與Flash的優(yōu)勢(shì),使用Flash實(shí)現(xiàn)軟件的界面繪制及人機(jī)交互,利用原生桌面應(yīng)用程序?qū)崿F(xiàn)系統(tǒng)中對(duì)效率要求較高的應(yīng)用,可以使應(yīng)用系統(tǒng)擁有美觀人機(jī)交互界面的同時(shí)又擁有較高的執(zhí)行效率。
然而,F(xiàn)lash組件與原生桌面應(yīng)用程序之間的通信問(wèn)題是實(shí)現(xiàn)兩者有機(jī)集成面臨的一個(gè)難點(diǎn),已成為制約該技術(shù)推廣應(yīng)用的一個(gè)主要瓶頸。目前,Windows平臺(tái)下Flash與其容器之間的通信方法復(fù)雜多樣,適用環(huán)境限制苛刻。文獻(xiàn)[1]提出了基于Flash提供的套接字編程接口實(shí)現(xiàn)通信的方法,但是該通信方法存在通用性差、不支持異步通信、并發(fā)通信服務(wù)支持能力低等問(wèn)題。文獻(xiàn)[2-3]提出了幾種通用通信中間件的設(shè)計(jì)方法,文獻(xiàn)[4]討論了提高中間件安全性的方法,文獻(xiàn)[5-8]則分別提出了幾種在特定軟硬件環(huán)境下特定用途的通信中間件的設(shè)計(jì)方法,然而這些設(shè)計(jì)方法并非針對(duì)原生桌面應(yīng)用程序與Flash應(yīng)用集成時(shí)的通信問(wèn)題進(jìn)行設(shè)計(jì),因此并不能有效解決集成Flash應(yīng)用中存在的通信問(wèn)題。
針對(duì)上述問(wèn)題,本文根據(jù)Flash套接字通信的特點(diǎn)設(shè)計(jì)了一種跨平臺(tái)、支持異步通信的通信中間件。該中間件利用多平臺(tái)支持的Socket進(jìn)行底層數(shù)據(jù)傳輸,實(shí)現(xiàn)了跨平臺(tái)的通信;基于消息傳遞服務(wù)實(shí)現(xiàn)了數(shù)據(jù)通信的并發(fā)處理和異步通信;針對(duì)Flash域安全模型的特點(diǎn),設(shè)計(jì)了兼容Flash安全機(jī)制的安全策略處理機(jī)制,滿足集成Flash組件的應(yīng)用對(duì)安全的需求。該通信中間件提供不同操作系統(tǒng)平臺(tái)上面向Flash組件集成的數(shù)據(jù)通信服務(wù),能夠?qū)崿F(xiàn)原生桌面應(yīng)用程序與Flash組件之間安全、可靠和高效的數(shù)據(jù)通信,為集成Flash的桌面應(yīng)用程序的開(kāi)發(fā)提供廣泛支持。
1 通信中間件的設(shè)計(jì)
1.1 Flash組件集成模型
面向Flash組件集成的通信中間件的通信雙方包括用于界面繪制及人機(jī)交互的各類(lèi)Flash組件、用于處理數(shù)據(jù)的原生Windows程序和原生Linux程序,其集成模型如圖1所示。

圖1 Flash組件集成模型
在Flash組件集成應(yīng)用程序中,F(xiàn)lash組件實(shí)現(xiàn)美觀的圖形化界面,并將用戶的選擇、輸入等各類(lèi)交互信息通過(guò)Flash通信代理和通信服務(wù)傳遞給各類(lèi)原生應(yīng)用程序;原生應(yīng)用程序處理由Flash傳遞的對(duì)執(zhí)行效率要求高的任務(wù),對(duì)各類(lèi)數(shù)據(jù)進(jìn)行相應(yīng)處理,并將處理結(jié)果通過(guò)通信代理和通信服務(wù)發(fā)送給Flash組件,在圖形化界面中刷新顯示。
1.2 通信中間件結(jié)構(gòu)設(shè)計(jì)
基于上述通信中間件集成模型,本文設(shè)計(jì)了一種面向Flash組件集成的通信中間件的總體結(jié)構(gòu),如圖2所示。

圖2 通信中間件組成結(jié)構(gòu)
面向Flash組件集成的通信中間件主要包括通信代理和通信服務(wù)兩部分,其中:通信代理,為各類(lèi)Flash組件和原生Windows、Linux程序提供功能一致的調(diào)用接口,包括Flash通信代理、Windows程序通信代理和Linux程序通信代理三類(lèi)通信代理;通信服務(wù),為各類(lèi)通信代理提供安全、可靠和高效的數(shù)據(jù)通信服務(wù),主要由通信安全策略處理模塊、通信協(xié)議處理模塊和消息傳輸處理模塊組成。
下面,本文分別詳細(xì)描述各模塊的主要功能及其設(shè)計(jì)與實(shí)現(xiàn)方法。
1.3 通信代理
通信代理為不同應(yīng)用客戶與通信服務(wù)之間的交互提供支撐,主要用于解決跨平臺(tái)環(huán)境下的通信問(wèn)題,其主要功能如下:
(1)在通信服務(wù)中注冊(cè)應(yīng)用客戶與注銷(xiāo)應(yīng)用客戶,包括:注冊(cè)應(yīng)用客戶并獲取應(yīng)用客戶標(biāo)識(shí)符,注銷(xiāo)應(yīng)用客戶并釋放相關(guān)資源;
(2)通信消息封裝與轉(zhuǎn)發(fā),包括:將應(yīng)用客戶的業(yè)務(wù)數(shù)據(jù)封裝成XML格式的通信消息并發(fā)送給通信服務(wù),接收通信服務(wù)發(fā)送的通信消息并轉(zhuǎn)發(fā)通知應(yīng)用客戶。
應(yīng)用客戶、通信代理及通信服務(wù)之間的交互過(guò)程如圖3所示。
通信代理采用基于TCP協(xié)議的實(shí)現(xiàn)方法,具體實(shí)現(xiàn)由具體的軟件平臺(tái)決定。Flash通信代理,使用Socket類(lèi)和XMLSocket類(lèi)實(shí)現(xiàn)與通信服務(wù)之間的數(shù)據(jù)交互,通過(guò)ActionScript語(yǔ)言提供的事件機(jī)制實(shí)現(xiàn)與上層Flash應(yīng)用客戶的交互;Linux/Windows通信代理,直接使用操作系統(tǒng)提供的套接字API接口實(shí)現(xiàn)與通信服務(wù)之間的數(shù)據(jù)交互,通過(guò)函數(shù)回調(diào)機(jī)制實(shí)現(xiàn)與上層原生Linux/Windows桌面應(yīng)用程序的交互?;赥CP協(xié)議的實(shí)現(xiàn)方法,使得通信代理具有跨平臺(tái)、跨機(jī)器的優(yōu)點(diǎn)。
1.4 通信服務(wù)
1.4.1 通信安全策略處理模塊
通信安全策略處理模塊為通信代理與通信服務(wù)之間的交互提供基于安全配置文件的訪問(wèn)控制能力,解決各種類(lèi)型通信代理的服務(wù)請(qǐng)求的安全驗(yàn)證問(wèn)題。通信安全策略處理保證只為合法的服務(wù)請(qǐng)求提供通信服務(wù),阻止來(lái)自非法應(yīng)用客戶的服務(wù)請(qǐng)求,提升了通信中間件數(shù)據(jù)通信的安全性。

圖3 應(yīng)用客戶、通信代理與通信服務(wù)交互過(guò)程
安全驗(yàn)證分為Flash通信代理安全驗(yàn)證和Linux/Windows通信代理安全驗(yàn)證兩方面。對(duì)于Flash通信代理的連接請(qǐng)求,通信服務(wù)根據(jù)安全配置文件生成符合Flash域安全機(jī)制要求的套接字策略文件,并發(fā)送給Flash Player實(shí)施安全驗(yàn)證;對(duì)于Linux/Windows通信代理的連接請(qǐng)求,安全配置文件作為一個(gè)安全域地址和端口號(hào)的白名單[9],在通信服務(wù)中實(shí)施安全驗(yàn)證。為了便于通信服務(wù)提取安全域地址列表,以及根據(jù)安全配置文件生成Flash Player域安全機(jī)制規(guī)定的套接字安全策略文件,通信安全策略處理模塊使用XML來(lái)定義安全配置文件。
安全配置文件定義了可信的安全域地址和端口號(hào)。安全域地址在<security-domain>標(biāo)簽中指定,允許的端口在<security-port>標(biāo)簽中指定。下面是一個(gè)安全配置文件的例子:
<security-configure-file>
<security-domain-group>
<security-domain>192.168.17.84 </securitydomain>
<security-port>1002< /security-port>
</security-domain-group>
<security-domain-group>
<security-domain>192.168.17.86 </securitydomain>
<security-port>1124< /security-port>
</security-domain-group>
</security-configure-file>
Flash通信代理與通信服務(wù)之間通信安全策略連接建立過(guò)程如下:
(1)Flash組件發(fā)起服務(wù)連接請(qǐng)求,F(xiàn)lash通信代理調(diào)用Socket.connect()方法;
(2)Flash Player與通信服務(wù)建立連接;
(3)Flash Player自動(dòng)向通信服務(wù)傳輸字符串<policyfile-request/>以請(qǐng)求策略文件;
(4)通信服務(wù)根據(jù)安全配置文件生成套接字策略文件返回給Flash Player;
(5)Flash Player根據(jù)套接字策略文件完成安全驗(yàn)證,通過(guò)驗(yàn)證就關(guān)閉安全驗(yàn)證連接并自動(dòng)建立通信連接,并拋出Connect事件給Flash通信代理處理;否則Flash Player自動(dòng)斷開(kāi)與通信服務(wù)的連接并拋出SecurityError事件給Flash通信代理處理。
Linux/Windows通信代理與通信服務(wù)之間通信安全策略連接建立過(guò)程如下:
(1)原生Linux/Windows桌面應(yīng)用程序發(fā)起服務(wù)連接請(qǐng)求,Linux/Windows通信代理向通信服務(wù)發(fā)送注冊(cè)服務(wù)請(qǐng)求消息;
(2)通信服務(wù)從安全配置文件中提取安全域和安全端口號(hào)列表;
(3)通信服務(wù)在安全域和安全端口號(hào)列表中搜索請(qǐng)求服務(wù)的通信代理的域地址和端口號(hào),如果匹配則允許建立連接,否則不允許連接。
1.4.2 通信協(xié)議處理模塊
通信協(xié)議處理模塊實(shí)現(xiàn)對(duì)通信消息的定義和處理功能,設(shè)計(jì)了通信代理與通信服務(wù)之間以及應(yīng)用客戶之間交互模式。
在通信消息定義方面,通信協(xié)議處理模塊在TCP協(xié)議上定義了一個(gè)消息通信協(xié)議,規(guī)定了通信用戶唯一標(biāo)識(shí)符的生成方法,通信服務(wù)與通信客戶之間交互的通信消息格式以及上層應(yīng)用業(yè)務(wù)數(shù)據(jù)的通信傳輸方式,具體約定如下:
(1)通信客戶唯一標(biāo)識(shí)符采用IP地址+處理線程號(hào)的形式表示;
(2)通信中間件處理的通信消息格式為XML文本;
(3)通信消息包含唯一消息標(biāo)識(shí)號(hào)、消息來(lái)源、消息發(fā)送目標(biāo)和消息類(lèi)型等信息;
(4)通信消息包含Attribute節(jié)點(diǎn),通過(guò)Key和Value來(lái)支持自定義屬性。
下面是一個(gè)典型的通信消息的例子:
<Message Id=’1234’ >
<From>192.168.17.52:1986</From>
<To>192.168.31.104:1124</To>
<Type>msgtype</Type>
<Attribute>
<Key>custom key</Key>
<Value>custom value</Value>
</Attribute>
</Message>
在通信消息處理方面,通信協(xié)議處理模塊根據(jù)通信消息的格式,定義并實(shí)現(xiàn)了一系列函數(shù)來(lái)實(shí)現(xiàn)對(duì)通信消息的封裝和解析。
1.4.3 消息傳輸處理模塊
消息傳輸處理模塊主要用于解決數(shù)據(jù)邊界確認(rèn)和并發(fā)通信問(wèn)題,實(shí)現(xiàn)Flash組件與原生桌面應(yīng)用程序之間高效、穩(wěn)定、可靠的數(shù)據(jù)通信,主要包括數(shù)據(jù)邊界處理、連接管理和消息隊(duì)列管理3個(gè)子模塊。其中:數(shù)據(jù)邊界處理采用特殊標(biāo)記法實(shí)現(xiàn)數(shù)據(jù)邊界區(qū)分,以字符