`
hance1000000
  • 浏览: 57689 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Flash Remoting的核心技术:AMF

    博客分类:
  • flex
阅读更多
Flash Remoting的核心技术:AMF2008-04-22 09:21AMF协议是基于Http协议的.
它的内容处理过程大致是这样:
1.从客户端获取Http请求(Request)流.
2.对流进行解串行化(Deserialize),得到服务器端程序能够识别的数据,并建立一个响应(Response)消息
3.Debug开始
4. 对流进行各种处理(记录、许可、服务)得到返回值
5.对响应流进行串行化
6.发送Http响应给客户端

Flash ActionScript 数据类型在AMF协议中对应的值是:
Number     0x00;
Boolean     0x01;
String     0x02;
Object     0x03;
MovieClip     0x04;
Null    0x05;
Undefined     0x06;
Reference     0x07;
ECMAArray     0x08;
ObjectEnd     0x09;
StrictArray 0x0a;
Date    0x0b;
LongString 0x0c; 
Unsupported 0x0d; 
Recordset     0x0e; 
XMLObject     0x0f; 
TypedObject(Class) 0x10;

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。

转自:http://blog.tom.com/fanzy1981_tech/article/6578.html

分享到:
评论

相关推荐

    flash与服务器端通信

    总结,Flash与服务器端通信是通过XMLSocket或Flash Remoting实现的,利用AMF等高效数据格式,与各种服务器端技术配合,提供丰富的交互体验。然而,随着技术的发展,现代Web技术正在逐步取代Flash,但仍有必要理解...

    AMF.NET 文件极小的开源AMF解析库

    AMF是一种二进制的数据交换格式,常用于Flash、Flex和Adobe AIR等技术中的远程方法调用(RPC)和数据传输。FluorineFx是另一个知名的AMF库,但在某些情况下,其文件大小可能过大,不适用于对资源有限或者性能要求较...

    构建FLASH和JAVA FOR SPRING应用(一)

    在提供的文件中,`openamf.jar`是OpenAMF的核心库,包含了处理Flash Remoting协议所需的所有组件。将这个库添加到项目中,可以让你的Spring应用支持AMF(Action Message Format),这是一种用于在Flash和服务器之间...

    thinkphp_amf

    在Flex中,我们可以使用Flash Remoting来实现AMF,通过创建RemoteObject或 BlazeDS服务来调用服务器上的方法。 3. **Demo** - 这个目录可能包含了具体的示例代码或者测试用例,展示如何在ThinkPHP和Flex之间通过AMF...

    amf0_spec_121207.zip_amf0_amf0_spec_1212_player

    另一方面,“communication”指的是AMF0如何作为Flash Player与服务器之间交换数据的媒介,比如在使用Flash Remoting时,服务器端的方法调用和响应数据都通过AMF0进行编码和解码。 "amf0_spec_121207.pdf"这份文档...

    openamf-1.0.2

    AMF是Flash Player与服务器之间进行数据交互的核心技术。它能够将复杂的对象结构高效地编码为二进制流,从而显著减少网络传输的数据量,提高通信速度。AMF有两种主要的版本:AMF0和AMF3,AMF3提供更好的压缩率和更高...

    FLash MX 和 ColdFusion MX 的通信 ( 边城浪子 )

    在实际操作中,Flash MX会使用AMF(Action Message Format)协议来序列化和反序列化数据,使得与ColdFusion MX的通信更加高效。开发者会在ActionScript中创建一个NetConnection对象,然后连接到ColdFusion服务器上的...

    blazeds flash开源服务器

    1. **Remoting**:这是Blazeds的基础,它允许Flash应用程序通过AMF直接调用服务器上的远程方法,实现了远程过程调用(RPC)。这种调用方式比XML-based的Web服务更为快速和高效。 2. **Message Brokering**:Blazeds...

    FlashRemonting+Java开发实例

    Flash Remoting的工作原理基于AMF(Action Message Format),这是一种二进制格式,用于高效地序列化和反序列化数据,使得数据在客户端和服务器之间快速传输。在Java端,通常会使用 BlazeDS 或 GraniteDS 这样的...

    完整、系统地把握flash动态网站开发

    - Flash Player不仅能够解释并播放Flash内容,还能通过Flash Remoting技术与后端服务器进行通信。这包括XML-RPC、WDDX、SOAP和AMF-RPC等多种协议,大大增强了Flash动态网站的功能性和交互性。 #### 四、总结 综上...

    Flash_Media_Server-config.rar_flash media server

    4. **Remoting**:FMS支持AMF(Action Message Format)协议,可以方便地进行服务器端数据处理,实现远程方法调用。 ## 四、RTMP协议与直播/点播 1. **RTMP协议**:是FMS默认使用的协议,用于实时数据传输,包括...

    blazeds-turnkey-4.0.0.14931.zip

    1. **Remoting**: Blazeds通过AMF(Action Message Format)协议提供远程方法调用,使得Flex客户端可以直接调用服务器上的Java方法,极大地提高了数据交换的效率。 2. **Messaging**: 该组件支持发布/订阅消息模式...

    Flash动态网站开发[文].pdf

    Flash Remoting技术使得Flash影片应用程序能够与服务器进行通信,实现数据交换,这在Rich Internet Applications (RIA)中扮演了重要角色。RIA结合了流媒体、动态交互和高效的通信,为用户提供更加丰富的网络体验。 ...

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

    2. **Remoting服务**:PyAMF支持Remoting,允许Python服务与Flash客户端之间进行远程调用。通过AMF协议,可以透明地调用服务器上的方法,仿佛它们是本地函数一样。 3. **Adapters适配器**:PyAMF提供了一套适配器...

    flex全书籍 flex全书籍

    5. **Services & Remoting**:Flex可以方便地与后端服务进行通信,如通过AMF(Action Message Format)与Flash Remoting连接,或者使用HTTP、SOAP、REST等协议访问Web服务。 6. **Flex Builder/Flash Builder**:...

    Blazeds与java通信

    Blazeds是一个强大的Java服务器端技术,主要用于实现Flex(一种基于Adobe Flash的用户界面开发工具)与后端Java应用程序之间的数据交互。它提供了一个全面的解决方案,使开发人员能够构建富互联网应用程序(RIA),...

    真正调试可用的FluorineFx+.NET视频聊天室源码

    FluorineFx是.NET平台上广泛使用的开源Adobe Flash Remoting实现,它支持AMF(Action Message Format)协议,使得Flash与.NET服务器之间能高效地进行数据交换。这个源码提供了一个完整的框架,开发者可以通过学习和...

    Flex AS3笔记

    - **AMF (Action Message Format)**: AMF是一种二进制格式的消息传输协议,用于在Flex客户端和服务器之间传递数据。它可以显著提高数据传输效率。 - **Remoting**: Flex通过Remoting服务与后端J2EE应用进行交互。...

    FluorineFxChatRoom.rar_FluorineFx_flex

    2. **FluorineFx核心功能**:FluorineFx提供了服务端的Remoting和essaging服务,允许.NET服务被Flex客户端调用。Remoting允许客户端直接调用服务器上的方法,而Messaging则支持发布/订阅消息模型,实现事件驱动的...

Global site tag (gtag.js) - Google Analytics