`

amf使用简介

    博客分类:
  • Php
阅读更多
最近需要用到amf 与flex通讯,特意找了一些文章

什么是AMF? (来源:http://blog.csdn.net/microrain/archive/2007/09/16/1786888.aspx)
       AMF(Action Message Format)是一种 binary format的资料型态,透过 AMF over HTTP的方式将flash端资料编码后传回server,server端的remoting adaptor接收到资料后则会译码回正确的native对象,交给正确的程序处理。
       AMF除了用于Flash remoting外,也广泛的用于 Local Connection 与 Flash communication server,它最大的特色在于可直接将flash native object,例如Object, Array, Date, XML,传回server端,并且在server端自动进行转译成适当的对象,例如flash 的Array传回PHP时就会自动转换为 Associative Array;这个特色对开发者最大的好处在于不需要再人工处理serialization 与 deserialization的繁复工作,不但精确度更高,同时开发也更省时间。
       由于AMF是binary format并且编码时经过高度压缩,因此非常适合用来传递大量的资料,根据flashorb网站的测试(主要针对web service与flash remoting),当资料量越大时,flash remoting的传输效能就越高,远远超过web service的表现,因此同样的道理也可得知xml, loadVars, loadVariables 等使用plaine text format的传输方式自然也无可比拟

-----------------------------------------------------------------------------------------------------------------------------------

Flash Remoting的核心技术:AMF
(来源:http://blog.tom.com/fanzy1981_tech/article/6578.html)

Flash 5开始就可以以XML或者“变量/值”配对输出格式向服务器传送数据。虽然这些数据能通过Flash编译器自动解析或者通过开发人员自行编写的代码手动解 析, 但解析的速度慢。因为在解析过程中,XML需要按节点逐层处理数据。而且使用XML和“变量/值”配对格式处理的数据类型只能是字符型,数字也不例外。而 Flash Remoting却能处理复杂数据类型, 比如对象、结构、数组,甚至可以是数据集,配合DataGrid组件可以很方便地显示数据。

为了处理复杂数据类型,采用一种独有的方式使Flash与应用服务器间可以来回传送数据势在必行。于是AMF应运而生。AMF是Adobe独家开发出来的 通信协议,它采用二进制压缩,序列化、反序列化、传输数据,从而为Flash 播放器与Flash Remoting网关通信提供了一种轻量级的、高效能的通信方式。如下图所示。



AMF最大的特色在于可直接将Flash内置对象,例如Object, Array, Date, XML,传回服务器端,并且在服务器端自动进行解析成适当的对象,这就减轻了开发人员繁复工作,同时也更省了开发时间。由于AMF采用二进制编码,这种方 式可以高度压缩数据,因此非常适合用来传递大量的资料。数据量越大,Flash Remoting的传输效能就越高,远远超过Web Service。至于XML, LoadVars和loadVariables() ,它们使用纯文本的传输方式,效能就更不能与Flash Remoting相提并论了。

注意:Flash Remoting需要浏览器支持Binary POST,Flash 播放器在Netscape 6.x.环境下运行Flash Remoting会不起作用(Flash Remoting调用没有效果也不返回错误), Netscape 7已经纠正了这个bug 。对于早期Safari和Chimera版的苹果机也有这个问题。

同样是轻量级数据交换协议,同样是通过调用远程服务,同样是基于标准的HTTP和HTTPS协议, Flash Remoting为什么选择了使用AMF而放弃了SOAP与Flash 播放器通信呢   有如下原因:

SOAP将数据处理成XML格式,相对于二进制的AFM太冗长了;
AMF能更有效序列化数据;因为AMF的初衷只是为了支持Flash ActionScript的数据类型,而SOAP却致力于提供更广泛的用途;
AMF支持Flash 播放器 6只需要浏览器增加4 KB左右(压缩后)的大小,而SOAP就大多了;
SOAP的一些头部文件请求在Flash 播放器 6不支持。那Flash 播放器 6为什么能访问基于SOAP的Web服务呢?原来Flash Remoting网关将SOAP请求在服务器端与转换成AFM格式,然后利用AFM与Flash 播放器通信。另外,AMF包中包含onResult事件(比如说response事件)和onStatus事件(比如说error事件),这些事件对象在 Flash中可以直接使用。
AMF从Flash MX时代的AMF0发展到现在的AMF3。AMF3用作Flash Playe 9的ActionScript 3.0的默认序列化格式,而AMF0则用作旧版的ActionScript 1.0和2.0的序列化格式。 在网络传输数据方面,AMF3比AMF0更有效率。AMF3能将int和uint对象作为整数(integer)传输,并且能序列化 ActionScript 3.0才支持的数据类型, 比如ByteArray,XML和Iexternalizable。


------------------------------------------------------------------------------------------------------------------------

5. 与后端集成
Flex是前端的界面技术,而后端和数据库交互或大型运算依然需要依托Java、.Net、PHP、Ruby等语言。早在Flash 8的时候Adobe就提出AMF(Action Message Format)技术,即将Java等语言的对象转换为ActionScript对象的技术规范。AMF是将对象编译后作为2进制数据传输,比起WebService、HTTPService、XML等都有很多好处。在Adobe方面推出了Data Services 2,支持了AMF等 功能,但是价格昂贵。在开源方面,PHP有专门支持的AmfPHP,另外WebORB同时支持.Net、Java、PHP、Ruby,PHP和Ruby是 免费的。在Java方面就比较可怜了只有openAMF,至今文档依然很少,并且只支持AMF0,其它语言都有相关工具支持到AMF3。
分享到:
评论

相关推荐

    AMF抓取flex页面数据

    1. **AMF简介** - AMF是一种高效的数据序列化格式,用于在Flex客户端和服务器之间传输数据。它比XML或JSON更快,因为它以二进制形式传输,减少了网络负载。 - AMF分为两种类型:AMF0和AMF3,其中AMF3提供了更好的...

    lua-amf 解析库

    1. **AMF3简介**:AMF3是AMF的第三个版本,相较于早期的AMF0,它提供了更高效的数据压缩和序列化方式。AMF3可以处理各种类型的数据,包括基本类型(如字符串、数字、布尔值)、复杂类型(如对象、数组、日期、XML)...

    amf3_spec amf3_spec

    - AMF3 使用一种特殊的变长编码方式来表示整数,该编码方式使用 29 位来表示一个整数,而不是标准的 32 位或 64 位整数。这种编码方式减少了序列化数据的整体大小。 - **1.3.2 字符串和 UTF-8** - 字符串使用 UTF...

    Action Message Format -- AMF3 中文版.doc

    #### 一、AMF3 简介 AMF3(Action Message Format 3)是一种用于序列化ActionScript对象图的紧凑型二进制格式。它主要用于在客户端与服务器端之间高效地传输数据。AMF3是在AMF0的基础上进行了优化和改进而诞生的新...

    Python库 | PyAMF-0.5-py2.5-linux-x86_64.egg

    **AMF简介** AMF是一种轻量级、高效的数据交换格式,它能够快速地序列化和反序列化数据,特别适合于Web服务和实时通信。AMF分为两个版本,AMF0和AMF3,PyAMF支持两者。AMF能够处理各种数据类型,包括基本类型(如...

    amfphp 2.1.1

    **AMF简介** AMF是一种二进制的数据序列化格式,由Adobe开发,它能够高效地编码和解码数据,特别是对于网络传输,显著减少了数据传输量。AMF分为两种类型:AMF0和AMF3,其中AMF3提供了更好的压缩和性能。AMFPHP支持...

    使用granite实现flex交互java

    1. **Flex简介**: Flex是一种用于创建RIA(Rich Internet Applications)的开源框架,基于ActionScript语言和Flash Player或Adobe AIR运行时。它提供了丰富的组件库和强大的数据绑定功能,使得开发者可以构建动态...

    最简单的java与flex通信实例与完全步骤总结

    - 引入Flex SDK的相关库,如`flex-messaging-common`和`flex-client`,以便使用AMF通信。 - 使用`RemoteObject`组件来调用Java服务,配置其`endpoint`指向服务器的AMF通道。 - 定义一个`UserService`的代理,绑定...

    Flex与Servlet之间数据的交互

    6. 使用AMF库:如BlazeDS或 GraniteDS 提供的AMF支持,这些库可以帮助在Flex和Servlet之间建立AMF通道,简化数据交换。 五、安全性和优化 1. 安全性:确保数据在传输过程中加密,例如使用HTTPS协议。同时,可以通过...

    openamf-1.0RC12-exampless.rar

    一、OpenAMF简介 OpenAMF是一个跨平台的AMF实现,它允许服务器端代码与客户端进行快速、低带宽的数据交互。AMF是一种二进制的序列化格式,由Adobe开发,主要用于Flash与服务器间的通信。OpenAMF支持多种语言,包括...

    Joe-网页游戏安全需求趋势

    AMF协议简介 AMF(Action Message Format)是由Adobe公司开发的一种数据传输协议。它允许直接传输Flash内置对象(如Object、Array、Date、XML等)到服务器端,并在那里自动解析为相应的对象类型,简化了开发过程并...

    flex+Fluorine简介及工具

    3. **AMF通信**:学习AMF协议的工作原理,如何在Flex和.NET之间创建数据通道。 4. **服务端开发**:熟悉.NET Framework,包括ASP.NET、WCF等服务创建和管理。 5. **调试与测试**:掌握调试Flex客户端和.NET服务端的...

    Flex使用RemotingObject和后台通信的基本步骤

    一、RemotingObject简介 RemotingObject是Flex的 Cairngorm 框架中的一部分,它提供了与后端服务(如AMF服务器,如BlazeDS或LCDS)交互的能力。RemotingObject允许我们调用远程方法,就像调用本地对象的方法一样,极...

    应用CBCT评估克服手术并发症的下牙槽神经管位置和心理孔的数量

    辅助性精神孔(AMF)是一种具有重要意义的相关解剖结构,因为其存在可能会导致无法使用常规神经阻滞技术实现足够的麻醉水平。 目的:利用CBCT评估下牙槽神经管的位置和附属的精神孔。 目的:1)评估牙槽神经管(ANC...

    flex 工具 blazeds

    BlazeDS将Java对象转换为AMF格式,使Flex客户端可以直接使用,反之亦然。 3. **Remoting服务** Remoting服务允许Flex客户端像调用本地函数一样调用远程的Java方法。通过配置通道(channels),如HTTP或HTTPS,...

    连接数据库包与源码

    本资源"连接数据库包与源码"提供了关于如何使用Flex和Java进行数据交互的实例,对于正在学习这一技术的开发者来说,具有很高的参考价值。 1. Flex简介: Flex是基于ActionScript 3.0的开发工具,由Adobe公司推出,...

    springmvc与Flex集成示例

    3. **客户端调用**:在Flex应用中,使用Flex的HTTPService或RemoteObject组件,通过AMF通道调用Spring MVC中的服务。 四、集成步骤 1. **配置Spring MVC**:在Spring配置文件中,配置HttpInvokerServiceExporter或...

    Spring BlazeDS Integration 1.0.0

    3. **AMF通信**:AMF是BlazeDS使用的一种二进制数据格式,它极大地提高了Flex客户端与服务器间数据传输的效率和速度。Spring BlazeDS Integration支持AMF,允许开发者透明地将Java对象序列化为AMF,以便在Flex客户端...

    用BlazeDS实现Java和Flex通信

    - **高效的二进制格式**:AMF使用二进制格式存储数据,这意味着它可以更快速地在网络上传输。 - **减少数据抽象层**:由于AMF协议的高效性,开发者可以在很多情况下省略数据抽象层,简化了开发流程。 - **提高通信...

Global site tag (gtag.js) - Google Analytics