李 哲,唐 稳,王福喜,王祥根
(华北计算技术研究所,北京100083)
Adobe Flash是一种基于矢量图片、位图、音视频及动作脚本等元素的交互式多媒体技术,已在互联网、嵌入式设备等多种场合得到广泛应用。但是,由于Flash基于虚拟机执行,因此其执行效率较低,不能适用于数据处理等需要大量运算的应用场合。与之相反,原生Windows或Linux程序由于直接调用操作系统提供的底层API,因此具有很高的执行效率,但是直接基于操作系统底层API或者利用集成界面开发工具的Visual C++等软件开发图形化人机交互界面的难度大,开发周期长。为了扬长避短,满足用户对系统界面效果和执行效率的需求,实现原生Windows或Linux程序与Flash组件间的集成成为一种有效的解决方案。
近年来,在原生桌面应用程序中集成Flash组件实现软件界面的开发方式得到了越来越广泛的应用,尤其是在国产自主基础软件平台环境下的图形用户界面应用程序开发领域。这种开发方式能够综合原生桌面应用程序与Flash的优势,使用Flash实现软件的界面绘制及人机交互,利用原生桌面应用程序实现系统中对效率要求较高的应用,可以使应用系统拥有美观人机交互界面的同时又拥有较高的执行效率。
然而,Flash组件与原生桌面应用程序之间的通信问题是实现两者有机集成面临的一个难点,已成为制约该技术推广应用的一个主要瓶颈。目前,Windows平台下Flash与其容器之间的通信方法复杂多样,适用环境限制苛刻。文献[1]提出了基于Flash提供的套接字编程接口实现通信的方法,但是该通信方法存在通用性差、不支持异步通信、并发通信服务支持能力低等问题。文献[2-3]提出了几种通用通信中间件的设计方法,文献[4]讨论了提高中间件安全性的方法,文献[5-8]则分别提出了几种在特定软硬件环境下特定用途的通信中间件的设计方法,然而这些设计方法并非针对原生桌面应用程序与Flash应用集成时的通信问题进行设计,因此并不能有效解决集成Flash应用中存在的通信问题。
针对上述问题,本文根据Flash套接字通信的特点设计了一种跨平台、支持异步通信的通信中间件。该中间件利用多平台支持的Socket进行底层数据传输,实现了跨平台的通信;基于消息传递服务实现了数据通信的并发处理和异步通信;针对Flash域安全模型的特点,设计了兼容Flash安全机制的安全策略处理机制,满足集成Flash组件的应用对安全的需求。该通信中间件提供不同操作系统平台上面向Flash组件集成的数据通信服务,能够实现原生桌面应用程序与Flash组件之间安全、可靠和高效的数据通信,为集成Flash的桌面应用程序的开发提供广泛支持。
面向Flash组件集成的通信中间件的通信双方包括用于界面绘制及人机交互的各类Flash组件、用于处理数据的原生Windows程序和原生Linux程序,其集成模型如图1所示。
图1 Flash组件集成模型
在Flash组件集成应用程序中,Flash组件实现美观的图形化界面,并将用户的选择、输入等各类交互信息通过Flash通信代理和通信服务传递给各类原生应用程序;原生应用程序处理由Flash传递的对执行效率要求高的任务,对各类数据进行相应处理,并将处理结果通过通信代理和通信服务发送给Flash组件,在图形化界面中刷新显示。
基于上述通信中间件集成模型,本文设计了一种面向Flash组件集成的通信中间件的总体结构,如图2所示。
图2 通信中间件组成结构
面向Flash组件集成的通信中间件主要包括通信代理和通信服务两部分,其中:通信代理,为各类Flash组件和原生Windows、Linux程序提供功能一致的调用接口,包括Flash通信代理、Windows程序通信代理和Linux程序通信代理三类通信代理;通信服务,为各类通信代理提供安全、可靠和高效的数据通信服务,主要由通信安全策略处理模块、通信协议处理模块和消息传输处理模块组成。
下面,本文分别详细描述各模块的主要功能及其设计与实现方法。
通信代理为不同应用客户与通信服务之间的交互提供支撑,主要用于解决跨平台环境下的通信问题,其主要功能如下:
(1)在通信服务中注册应用客户与注销应用客户,包括:注册应用客户并获取应用客户标识符,注销应用客户并释放相关资源;
(2)通信消息封装与转发,包括:将应用客户的业务数据封装成XML格式的通信消息并发送给通信服务,接收通信服务发送的通信消息并转发通知应用客户。
应用客户、通信代理及通信服务之间的交互过程如图3所示。
通信代理采用基于TCP协议的实现方法,具体实现由具体的软件平台决定。Flash通信代理,使用Socket类和XMLSocket类实现与通信服务之间的数据交互,通过ActionScript语言提供的事件机制实现与上层Flash应用客户的交互;Linux/Windows通信代理,直接使用操作系统提供的套接字API接口实现与通信服务之间的数据交互,通过函数回调机制实现与上层原生Linux/Windows桌面应用程序的交互。基于TCP协议的实现方法,使得通信代理具有跨平台、跨机器的优点。
1.4.1 通信安全策略处理模块
通信安全策略处理模块为通信代理与通信服务之间的交互提供基于安全配置文件的访问控制能力,解决各种类型通信代理的服务请求的安全验证问题。通信安全策略处理保证只为合法的服务请求提供通信服务,阻止来自非法应用客户的服务请求,提升了通信中间件数据通信的安全性。
图3 应用客户、通信代理与通信服务交互过程
安全验证分为Flash通信代理安全验证和Linux/Windows通信代理安全验证两方面。对于Flash通信代理的连接请求,通信服务根据安全配置文件生成符合Flash域安全机制要求的套接字策略文件,并发送给Flash Player实施安全验证;对于Linux/Windows通信代理的连接请求,安全配置文件作为一个安全域地址和端口号的白名单[9],在通信服务中实施安全验证。为了便于通信服务提取安全域地址列表,以及根据安全配置文件生成Flash Player域安全机制规定的套接字安全策略文件,通信安全策略处理模块使用XML来定义安全配置文件。
安全配置文件定义了可信的安全域地址和端口号。安全域地址在<security-domain>标签中指定,允许的端口在<security-port>标签中指定。下面是一个安全配置文件的例子:
<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通信代理与通信服务之间通信安全策略连接建立过程如下:
(1)Flash组件发起服务连接请求,Flash通信代理调用Socket.connect()方法;
(2)Flash Player与通信服务建立连接;
(3)Flash Player自动向通信服务传输字符串<policyfile-request/>以请求策略文件;
(4)通信服务根据安全配置文件生成套接字策略文件返回给Flash Player;
(5)Flash Player根据套接字策略文件完成安全验证,通过验证就关闭安全验证连接并自动建立通信连接,并抛出Connect事件给Flash通信代理处理;否则Flash Player自动断开与通信服务的连接并抛出SecurityError事件给Flash通信代理处理。
Linux/Windows通信代理与通信服务之间通信安全策略连接建立过程如下:
(1)原生Linux/Windows桌面应用程序发起服务连接请求,Linux/Windows通信代理向通信服务发送注册服务请求消息;
(2)通信服务从安全配置文件中提取安全域和安全端口号列表;
(3)通信服务在安全域和安全端口号列表中搜索请求服务的通信代理的域地址和端口号,如果匹配则允许建立连接,否则不允许连接。
1.4.2 通信协议处理模块
通信协议处理模块实现对通信消息的定义和处理功能,设计了通信代理与通信服务之间以及应用客户之间交互模式。
在通信消息定义方面,通信协议处理模块在TCP协议上定义了一个消息通信协议,规定了通信用户唯一标识符的生成方法,通信服务与通信客户之间交互的通信消息格式以及上层应用业务数据的通信传输方式,具体约定如下:
(1)通信客户唯一标识符采用IP地址+处理线程号的形式表示;
(2)通信中间件处理的通信消息格式为XML文本;
(3)通信消息包含唯一消息标识号、消息来源、消息发送目标和消息类型等信息;
(4)通信消息包含Attribute节点,通过Key和Value来支持自定义属性。
下面是一个典型的通信消息的例子:
<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>
在通信消息处理方面,通信协议处理模块根据通信消息的格式,定义并实现了一系列函数来实现对通信消息的封装和解析。
1.4.3 消息传输处理模块
消息传输处理模块主要用于解决数据边界确认和并发通信问题,实现Flash组件与原生桌面应用程序之间高效、稳定、可靠的数据通信,主要包括数据边界处理、连接管理和消息队列管理3个子模块。其中:数据边界处理采用特殊标记法实现数据边界区分,以字符 作为一个完整数据流结束的标识,以解决基于TCP的数据流服务无记录边界的问题。数据通信时,每一个发送的完整的数据流末尾加上一个字符 作为结尾,数据接收端把接收到的数据首先放在接收数据缓冲区中,缓冲区中的数据发生变化时,利用数据边界检测模块对其中的数据进行检测,以 为结束标志读取数据。
连接管理采用单守护线程多通信线程的方式[10],解决并发通信的问题,主要包括为新请求的通信连接创建处理线程、关联通信套接字、数据收发和销毁处理线程等功能。连接管理守护线程在通信中间件启动时初始化,开启一个监听端口,等待接收应用客户的连接请求,并为每个连接请求创建子线程来处理通信。
消息队列管理按照队列的方式组织通信消息,利用消息队列统一处理通信双方的请求及应答,提供一种异步通信方式[11-12],主要实现创建消息队列、销毁消息队列和并发访问消息队列等功能。
消息传输处理模块的工作过程如下:通信服务启动后首先由连接管理模块初始化守护线程,开始监听通信代理的连接请求。当通信代理的连接请求到达时,连接管理模块为新请求创建分支子线程来处理通信。子线程通过消息边界处理模块对通信数据进行完整性处理,之后开始通信消息的接收和发送,也就是不同应用客户之间的消息通信。接收通信消息时,通信子线程调用消息队列管理模块将通信消息放入消息队列中。发送通信消息时,通信子线程调用消息队列管理模块从消息队列中取出通信消息发送给对应的通信代理。
本文设计实现的通信中间件已经成功应用到国产自主软件平台下的一个图表展示软件系统中,该系统的一个图表展现界面如图4所示。
图4 应用实例的一个图表展现界面
该图表展示软件系统运行在中标麒麟桌面操作系统之上,采用QT技术开发。图表展示界面采用Flex技术开发,使用QT提供的QWebView界面组件类把Flash图表组件作为一个网页元素进行加载显示,作为Flash组件的容器,实现了该系统对Flash组件的界面集成。Flash图表组件与其容器之间的通信采用本文设计的通信中间件来实现。
图表展现软件系统Flash组件集成模型的结构如图5所示,系统中Flash组件容器通过调用底层的数据库存取接口读取数据库中的图表数据,各个Flash图表组件通过通信中间件与其容器进行通信,获取图表数据并以图表的形式展现。当Flash图表组件的数据被用户改变时,通过通信中间件将更新的图表数据传输给Flash组件容器,实现数据库中图表数据的更新。
图5 应用实例Flash组件集成结构
应用实践证明,通信中间件在该图表展现软件系统中为Flash图表组件和Flash组件容器提供了稳定、可扩展的数据通信服务,很好地解决了集成Flash组件的原生桌面应用程序中Flash组件与其容器之间的通信问题。
本文提出了一种解决Flash组件集成中数据通信问题的新方法,即:通过通信中间件来屏蔽不同组件容器环境的差异性,为多种容器环境提供一致的Flash组件集成模型,通过标准的数据传输接口进行数据通信,为开发人员提供统一的数据通信编程接口。利用本文所提出通信中间件的设计与实现方法,可实现不同软件平台下原生桌面应用程序与Flash组件之间安全、可靠和高效的数据交互。基于该通信中间件,可实现运行高效、界面美观的应用系统,并且能够缩短应用程序的开发周期,节约开发成本。
[1]LI Xia,CHEN Song,ZHANG Guoyan.Communication between VC++and Flash based on socket[J].Journal of Chongqing Jiaotong University(Natural Science),2011,30(2):344-348(in Chinese).[李霞,陈松,张国琰.基于Socket的VC++与Flash通信 [J].重庆交通大学学报,2011,30(2):344-348.]
[2]ZHANGChun,ZHANGJinxia.Architecture and implementation of distributed multi-protocol middleware[J].Computer Engineering and Design,2011,32(10):3419-3423(in Chinese).[张春,张金霞.分布式多协议中间件的架构与实现 [J].计算机工程与设计,2011,32(10):3419-3423.]
[3]CAO Yanchun,FANG Dingyi,LIU Wei,et al.Design and implementation of a short message communication middleware based on Linux[J].Computer Engineering,2006,32(3):273-275(in Chinese).[曹艳春,房鼎益,刘炜,等.基于Linux的短消息通信中间件的设计与实现 [J].计算机工程,2006,32(3):273-275.]
[4]LIYimin,LINGJie.Design of securemessage oriented middleware[J].Computer Engineering and Desig,2011,32(6):1934-1937(in Chinese).[李易民,凌捷.安全消息中间件的设计[J].计算机工程与设计,2011,32(6):1934-1937.]
[5]WU Zhitie,YAO Shijun,CHEN Zhenzhong.Design of mobile agent-base middleware for communication of military tactical Ad hoc network [J].Computer Engineering and Design,2008,29(10):2448-2450(in Chinese).[吴之铁,姚世军,陈振中.基于移动Agent的战术Ad hoc网络通信中间件设计[J].计算机工程与设计,2008,29(10):2448-2450.]
[6]YAN Xiaofen,GUO Yinzhang.Research of asynchronous communication in distributed object-oriented middleware based on Agent and P/S model[J].Computer Engineering and Design,2008,29(24):6213-6217(in Chinese).[闫晓芬,郭银章.基于移动Agent与P/S混合模式的分布对象中间件异步通信研究 [J].计 算 机 工 程 与 设 计,2008,29(24):6213-6217.]
[7]DU Xu,ZHAGN Xiang,XU Jing.Design and implementation of the embedded network communication middleware [J].Computer Engineering&Science,2007,29(9):23-25(in Chinese).[杜旭,张翔,徐晶.嵌入式网络通信中间件的设计与实现 [J].计算机工程与科学,2007,29(9):23-25.]
[8]YIN Fengshe,JIAO Lei.Design and implementation of JAVA-based middleware for communication[J].Modern Electronics Technique,2010,33(15):149-152(in Chinese).[殷锋社,焦蕾.基于Java的通信中间件的设计与实现[J].现代电子技术,2010,33(15):149-152.]
[9]WANG Feng,ZHOU Dashui.Design and implementation of active defense system based on white list[J].Computer Engineering and Design,2011,32(7):2241-2244(in Chinese).[汪峰,周大水.白名单主动防御系统的设计与实现[J].计算机工程与设计,2011,32(7):2241-2244.]
[10]YANG Chao,XU Ruzhi,YANG Feng.Multi-process data processing system based on message queue[J].Computer Engineering and Design,2010,31(13):3128-3131(in Chinese).[杨超,徐如志,杨峰.基于消息队列的多进程数据处理系统 [J].计算机工程与设计,2010,31(13):3128-3131.]
[11]YAN Xiaofen,GUO Yinzhang.Interface of asynchronous communication in distributed object-oriented middleware basedonP/SMode[J].Computer Engineering,2009,35(6):125-129(in Chinese).[闫晓芬,郭银章.基于P/S模式的分布对象中间件异步 通 信接 口 [J].计 算 机 工 程,2009,35(6):125-129.]
[12]ZHAO Yanhong,GUO Yinzhang,BAI Shangwang.On conversion mechanism of asynchronous communication message based on time decoupling in distributed object-oriented middle ware [J].Computer Applications and Software,2008,25(10):160-162(in Chinese).[赵艳红,郭银章,白尚旺.基于时间解耦的分布对象中间件异步通信消息转换机制研究 [J].计算机应用与软件,2008,25(10):160-162.]