Rich Client
Rich Client的发布
一名“富客户端”(Rich Client)简介
富因特网应用程序(Rich Internet Applications,RIA)利用具有很强交互性的富客户端技术来为用户提供一个更高和更全方位的网络体验。RIA集成了桌面应用的交互性和传统Web应用的部署灵活性与成本分析,以创建单一而完整的用户体验。富客户端技术使创建RIA成为可能,它提供一个运行时的环境以承载被编译的客户端应用程序,该客户端应用程序是一个使用HTTP协议发布的文件。客户端应用程序使用异步的C/S结构连接到现有的应用服务器,这是一种安全的、可升级的、具有良好适应性的面向服务模型,这种模型由当前所采用的Web服务驱动。
富客户端技术正在不断地完善中,但并不意味着会取代HTML。相反它将进一步扩展浏览器功能,使之提供更加高效和友好的用户接口。许多RIA都在浏览器中运行,甚至它本身就是HTML的一部分,所以HTML将继续保持其原有的角色。另外,由于富客户端技术可以支持运动的图象、视频、音频、双向的数据通信和创建复杂的窗体,它为创建应用程序用户接口提供了一个高效而完善的开发环境.
RIA开发必须具备三个要素:富客户端技术、服务器技术和开发工具。富客户端技术充分利用本地机器的处理能力来处理数据,而不需要把某些数据发送到服务器处理,充分利用了本地机器的资源。服务器技术提供了一种与富客户端的连接机制,作为RIA的服务器技术必须从现有的服务器技术继承,可以提供一个快速的脚本环境,支持数据库应用开发、双向数据通信、实时数据通信,甚至采用一种新的服务器,例如:ColdFusion Server和Flash Communication Server等。RIA实现必须有一组简单而高效的开发工具,如果没有一组简单而高效的开发工具,那么富客户端技术与服务器技术是毫无意义的。正是由于RIA的C/S结构,它需要一组开发工具协同工作才可以完成。
尽管目前有许多富客户端技术,但是Macromedia Flash Player却被广泛采用,它已经逐渐成为富客户端技术的网络标准。Flash Player 已经是一个无处不在的富媒体客户端,它可以在不同的浏览器和操作系统上运行,所以它是一个跨平台、跨操作系统的网络客户端。
“富”的概念包含两方面,分别是指它具备丰富的用户界面和丰富的数据模型。
典型的富客户端模型
富客户模型将界面分解成许多的既可以和用户直接交互又可以和服务器进行通信的小单元模块。
这种将应用程序的设计从以一个个相对独立的页面为中心转移到以组件为中心的转变将会使客户层的设计提升到一个新的层次,并且会使客户层变得更加灵活。富客户层不再成为服务器响应的最终端,这同时也使程序的性能得以提高,用户使用的感觉就好像程序不需要和服务器进行通信或者只是偶尔才需要进行通信。
不像传统的模型那样,服务器收到请求后由上至下的创建客户端界面,你不用预测事件的顺序。既然每个组件都是独立的,就没有必要因为一个请求而做出影响整个视图的反应。要使每个组件都具有向服务器传送信息的能力需要每个组建知道如何处理服务器传递回来的信息。在RIA中,客户端和服务器端交互数据是不同步的,这样你就可以控制组件创建信息发送给服务器和处理服务器的响应,可以为更零散的控制去耦和分离程序功能并且组建面向服务的程序结构。
Rich Client是一个相对的概念,主要是针对时下广泛的基于WEB的应用,因为这种客户端(也即现有的各种浏览器)的运行环境没有提供一个很好的组件模型和交互模型致使这种应用的界面的同服务之间的交互变的很奇怪,每一次交互都需要重新组织出整个界面,而这个界面的组织基本在服务器端完成,也所以致使表现层的逻辑居于服务器端,所以称这种为Thin Client,而相对的则是Rich Client,目前来说在技术上Rich Client还没有一个甚或是两个大一统而且又成熟的标准技术出来,所以Rich Client只能说是一种架构方式,其特点便是服务同表现完全的物理分离,表现逻辑完全由客户端来负责,这是最关键的一点。但我认为一定要同时兼顾原有WEB应用的零部署等特点。
C/S架构下,客户端程序发布与维护一直比较困难和繁琐。在版本更新以后,需要对客户的客户端程序进行逐个下载安装及配置更新,这是一个体力活,而这也一直是使用户大量选择WEB程序的因素之一。
在Rich Client时代,由于宽带网络的便利,在客户端尽尽需要从服务器端下载已经更新好的程序运行,而不必理会繁琐的下载、安装和配置的过程。
这里不得不提Java的是WebStart技术。
WebStart是让用户只需在网页上点击一个超级链接就能运行一个Java桌面应用的技术。对于一个拥有WebStart能力的Java应用来说,用户使用它就和使用WEB应用一样的简单,但它所具有的界面能力和本地处理能力却是WEB应用无法望其项背的。
具体的应用的技术知识可以从http://java.sun.com中寻找相关文档,这里不一一赘述。
Rich Client的通信机制
除了快捷方便的发布外,Rich Client还需要与服务器端建立一种快速、可靠、强大、易用的通信交互机制。但我们开发WEB应用时,表现层和业务服务层常常只是同一个进程中的不同对象,它们之间的交互不过是Java的方法调用而已,当表现层逻辑被分发到世界各地的计算机上,客户端和服务器之间的交互就成了一个大问题——从前的C/S被淘汰,很大程度上归咎于socket通信的复杂性。
现在,形形色色的RPC(远程过程调用,Remote Procedure Call)技术以独特的优势扮演起了信使的角色。以下列举几种Rich Client可以采用的通信机制。
CORBA和RMI
CORBA(通用对象请求代理体系结构,Common Object Request Broker Architecture)曾经红极一时,它能够兼容各种操作系统平台的语言,强大的的可扩展性所带来的负面影响就是实现的复杂和繁琐。如果服务器端和客户端都采用Java开发,那么CORBA所需要的语言无关的IDL就完全变成了画蛇添足。当然,对于需要集成大量企业内遗留的系统的EAI(企业应用集成)项目中,它一直是首选的技术。
RMI可以是做CORBA的Java版本,但相比较而言这是一个轻量级的版本了,对于服务器和客户端两边都用Java来实现的前提下,这是一个非常好的选择。
CORBA和RMI有一个共同的缺陷:通常不会在系统80端口提供服务,所以这在具备网络防火墙的情况下显得非常被动。
XML-RPC
为了解决在系统的80端口提供RPC的服务,而又不影响正在执行的WEB服务,人们想出了用HTTP协议传输RPC包的办法。对于几乎是专门用于传输文本的HTTP协议,要在其上传输RPC封包,最方便的方法莫过于把RPC封包编码成文本形式——例如XML文件。
XML-RPC(http://www.xml-rpc.com)是由美国UserLand公司指定的一个RPC协议。它将RPC信息封包编码为XML,然后通过HTTP传输封包;它是一个简单的RPC协议,只支持一些基本数据类型,不支持对象模型,这势必掣肘在客户端和服务器端之间传输复杂的对象。
SOAP
SOAP即Simple Object Access Protocol(简单对象访问协议)是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。它允许所有的操作在80端口上进行,从而也绕过了防火墙等问题。
SOAP规范中有三个基本组成部分:SOAP封装,编码规则,以及在请求和响应之间的交互方式。
目前已有的基于JAVA提供SOAP功能的产品有:Apache SOAP, IBM SOAP4J等
要了解更多关于SOAP的信息,可以访问 http://www.w3.org/TR/SOAP
Hessian
Hessian(http://www.caucho.com)是由Resin应用服务器的开发商Caucho公司制定的一个RPC协议,虽然它也是通过HTTP协议传输RPC封包,但是它的RPC封包却是以二进制形式编码的,而且能够表现对象模型和异常体系,这就使得Hessian比XML-RPC具有更高的效率。
具体通信机制资料请读者参考网上内容和透明于2004年5期《程序员》杂志中《王朝复辟还是浴火重生》一文。
Rich Client开源开发平台Laszlo
Laszlo是一个开源的Rich client开发环境。使用Laszlo平台时,开发者只需编写名为LZX的描述语言(其中整合了XML和JavaScript),运行在J2EE应用服务器上的Laszlo平台会将其编译成FLASH文件并传输给客户端展示。单从运行原理来说,Laszlo与XUL(XML用户接口语言, XML User interface Language)、XAML(“Longhorn”)标记语言很类似。但它的最大优势在于:它把描述语言编译成FLASH,而FLASH是任何浏览器都支持的展示形式,从而一举解决了浏览器之间的移植问题。而且,在未来的计划中,Laszlo还可以将LZX编译成Java或.NET本地代码,从而大大提高运行效率。
具体请参考http://www.openlaszlo.org。
IBM AlphaWorks网站近日发布了用于开发Laszlo应用程序的集成开发环境(实际上是一个Eclipse插件),使J2EE开发者能够在他们熟悉的Eclipse环境中快速开发基于Laszlo的rich client应用程序。可以在下列地址下载该插件:
http://alphaworks.ibm.com/tech/ide4laszlo
此外,AlphaWorks网站还提供了一个用Laszlo开发的示例应用,展示了在Eclispe环境下开发Laszlo应用的过程。demo的地址如下:
http://dl.alphaworks.ibm.com/technologies/rcb/demo.html
FLEX
Flex是Macromedia公司开发的,用于Rich client开发的环境,其原理是将MXML(the Macromedia Flex Markup Language)文件,编译成SWF文件,然后显示在浏览器中,并利用Web Service技术和服务器通信。从而利用Flash的强大功能,带来更丰富的用户体验。
Flex官方说法如下(摘自网络上相关文章):
原代号为“Royale”的MacromediaFlex软件将把服务器软件、开发指南和其他工具组合在一起,使传统的网络应用开发人员能够用Macromedia公司的Flash格式创作软件单元。如从前报道的那样,该产品的重点是让那些使用Sun微系统公司的Java2企业版(J2EE)的开发人员能够创作出更有吸引力、更容易导航的J2EE应用软件接口。
Flex将使J2EE开发人员使用标准的文本式开发工具来制作Flash应用程序,而不必使用Macromedia公司以前出售的复杂的设计工具。Macromedia公司从今年年初开始,努力扩大Flash格式对于主流开发商的吸引力,其目标是扩大Flash的用途,使其成为提供互联网应用和建立交互式网站的基础。
Macromedia公司计划在2004年上半年推出Flex服务器软件,该软件的价格目前还没有确定。它的初级版本将运行于J2EE中,并计划随后推出支持微软的.Net格式的版本。最初的支持者包括IBM公司,它将随自己的WebSphere软件一起推广Flex的应用。
需要了解更多Flex技术的朋友可以访问Flex的主页:
http://www.macromedia.com/software/flex/