Welcome

首页 / 软件开发 / Flex / 使用BlazeDS和AMF构建Web和桌面应用

使用BlazeDS和AMF构建Web和桌面应用2010-11-23 infoq 译:沙晓兰无论是采用Adobe AIR技术的桌面应用程序 ,还是结合Flash Player使用浏 览器的应用,在需要加载或处理数据的时候往往都需要连接到服务器。在采用 Adobe Flex或Flash CS3来开发应用程序的过程中,应用程序与服务器间交互的 实现方式有很多选择。服务器本身除了可以运行Java、ColdFusion、.Net、 PHP 、Ruby等某种服务器端技术之外,还必须具备网络通信的能力,这为Flash Player中运行的应用或Adobe AIR应用的客户端与服务器端间的交互奠定了基础 。通常,两者间的通信采用的是HTTP协议-- 也就是web浏览器加载web页面和应 用时所采用的协议。但是,HTTP协议下采用不同的数据传输方式会带来应用性能 和开发效率的天壤之别。

很多在Abode AIR或Flash Player中运行的应用 都采用XML-over-HTTP技术(比如SOAP、REST等)在客户端和服务器之间传输数 据。这个方法很简单,也很容易搭建。无论是哪种服务器端技术都很容易应用 XML,因为XML完全是一个基于文本的协议。在必须实现透明协议的时候,XML是 完美的选择。比如,Flickr的web服务在HTTP传输之上采用的就是REST风格的XML 。这样一来,无论是谁采用哪种技术都可以简单地通过向Flickr发送简单的基于 文本的请求来与Flickr交互。Flickr的回复是简单的XML,开发者可以轻松地解 析这个XML回复,使用其中的数据。像XML这样基于文本的协议的缺点是额外的数 据抽象层的编写与维护工作相对很沉重。此外,如果数据需要序列化和反序列化 ,那么这个数据抽象层在客户端和服务器端都会占用很多资源(参见图1)。

图1. AMF减少封送处理的数据层

Flash Player可以支持另外一 种传输协议,这个协议能够缓解由基于文本的协议导致的传输瓶颈问题,能够帮 助开发者以更简单的方式与服务器交互。这就是 AMF(Action Message Format )。它是一个二进制格式的协议,能够替代用于传输XML的基于文本的协议而在 HTTP协议之上交换数据。采用AMF的应用中,数据抽象层完全可以省去,客户与 服务器间的通讯效率比传统的应用基于文本的协议传输要高得多。Census RIA Benchmark应用程序可以证明AMF带来的性能优势。

过去几年里,大量旨 在提供AMF实现的开源项目蜂拥而至,这些项目与Macromedia之前一个叫做Flash Remoting的产品很相似。由于这些开源项目,无论是PHP、Java还是其它技术的 开发人员都得以能够在他们的应用中采用AMF。Flex 1.0版本发布的时候,就涵 盖了AMF相关功能。Flex发布版本2的时候同时包含了XML和AMF的相关功能,但服 务器端的AMF相关功能却特别转移到 Flex Data Services这个新产品中。Flex Data Services在集成到Live Cycle产品系列中的时候又被重新命名为LiveCycle Data Services。针对单个CPU服务器的LiveCycle Data Services ES Express是 免费的,但针对拥有多个CPU服务器的产品则收费很高,这使得一些开发者在选 择AMF的时候望而却步,其中一些人也因此干脆转而选择一些非标准的AMF实现。

2007年十二月,Adobe做出了两个巨大的决策,让所有人都能够使用AMF 。第一个决定是公开AMF规范。规范公布以后,所有项目都能按照规范来实现 AMF,而不用再对协议做反向工程。无论back-end采用的是Java、ColdFusion、 PHP、.Net、Ruby还是其它技术,AMF的实现都只需要遵守规范即可。另一个决策 是以BlazeDS项目的方式开源LiveCycle Data Services ES中的部分技术。

BlazeDS中包含了AMF的Java实现,可以用来与服务器端的Java对象远程 交互,也可以用来在客户端之间传递消息。开发人员可以借助 BlazeDS的远程技 术简单地调用POJO、Spring服务或EJB方法。开发人员可以通过其消息系统从客 户端向服务器端发送消息,当然也可应从服务器端向客户端发送消息。BlazeDS 也可以与其他一些消息系统结合使用,比如JMS、ActiveMQ。由于其远程技术与 消息系统采用的方式是在 HTTP协议上传输AMF数据,BlazeDS因此在性能上拥有 很大优势,同时也避免了额外的数据抽象层的处理工作。BlazeDS在很多基于 Java的应用服务器环境下都能正常工作,这些服务器包括Tomcat、WebSphere、 WebLogic、JBoss以及ColdFusion。此外,无论是 web(在Flash Player中运行 )还是桌面(在Adobe AIR下运行)的Flex应用程序中,BlazeDS的使用都很简单 。

开发人员现在可以从Adobe Labs站点(http://labs.adobe.com/)上下载预发 布版本(https://www.adobe.com/cfusion/entitlement/index.cfm? e=labs_blazeds),将blazeds-samples.war文件部署到任何一个servlet容器中 ,就开始你使用BlazeDS开发的旅程了。这个web应用包中提供了很多预配置的示 范应用,所有这些应用都可以通过http://localhost:8080/blazeds-samples/ (端口号由你所使用的应用服务器和服务器配置所决定)来访问。