什么是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。
----------------------------------------------------------------
相关推荐
序列化是指将.NET对象转换为AMF格式的数据,以便在网络中传输或存储;反序列化则是将接收到的AMF数据转换回.NET对象,供程序使用。这种功能使得AMF.NET成为开发与Flash或Flex客户端交互的服务器端应用程序的理想选择...
由于没有具体的文件列表,无法详细说明包内具体的内容,但可以想象,这可能包括AMF编码和解码的实现,可能有针对特定服务器或客户端环境的适配器,以及可能的一些示例或测试代码。 AMF的主要优点在于其性能和效率。...
在C++编程环境中,AMF3库可以帮助开发者高效地处理这种数据格式,使得网络通信更加便捷。下面我们将详细探讨AMF3在C++中的实现以及源码库的相关知识点。 AMF3的核心功能在于能够将复杂的数据结构(如对象、数组、...
AMF3(Action Message Format version 3)协议是Adobe公司为Flash Player和Flex应用程序之间通信设计的一种二进制数据交换格式。它旨在提高数据传输效率,同时保持足够的灵活性以适应不同类型的复杂数据结构。AMF3...
在标题“amf3_spec_05_05_08.zip_AMF3_above flash player_player”中,我们可以理解这是关于AMF3规范的一个版本,发布日期可能是2005年5月8日,主要针对Flash Player 9及以上版本。描述进一步说明了这是用于Flash ...
”进一步明确了这是一个关于5G核心网络技术的规范,特别是与AMF相关的接入和移动管理服务。5G系统是新一代移动通信标准,旨在提供高速、低延迟、大连接数等特性,以支持物联网(IoT)、自动驾驶、远程医疗等多种新...
AMF0将复杂的数据结构,如对象、数组、日期、字符串等,转化为二进制流,使得在网络传输中占用的带宽更少,从而提高了应用的响应速度。 在AMF0规范文档《amf0_spec_121207.pdf》中,可能会涵盖以下几个关键知识点:...
AMF,全称为Action Message Format,是一种用于在网络应用程序之间传输数据的高效二进制格式。在Web服务和富互联网应用程序(RIA)中广泛使用,尤其是Adobe Flex和Flash平台。AMF能够提供比纯文本格式(如JSON或XML...
3. **压缩支持**:AMF0和AMF3版本都提供了数据压缩功能,进一步优化了网络传输效率。 在C#中实现AMF服务端协议解析和封装,主要涉及到以下几个方面: 1. **AMF协议解析**:需要理解AMF的编码规则,包括AMF0和AMF3两...
Socket编程与AMF3在IT领域是两个重要的概念,它们分别代表了网络通信的基础和一种...同时,标签中的“源码”和“工具”提示,这篇文章可能还包含了示例代码和一些实用工具,对于学习和实践socket+AMF3编程非常有价值。
"AMF编码解码演示版_Refon.exe"很可能是这个演示程序的执行文件,用户可以通过运行它来直观地看到AMF编码和解码的效果,比如输入一些测试数据,观察编码后的二进制数据,以及解码后恢复的数据是否与原始数据一致。...
AMF格式文件最初在Flash Player 6中引入,并被广泛应用于网络通信,特别是在Adobe Flex框架和BlazeDS中间件中,它允许客户端和服务器之间通过AMF编码的数据进行高效、强类型的数据交换。 AMF格式文件有多个版本,...
AMF(Action Message Format)是一种数据交换格式,主要用于Flash与服务器之间的通信,尤其在Adobe Flex应用中广泛应用。AMF数据分析器是一款专为处理和解析AMF数据而设计的专业工具,旨在提升开发人员对AMF数据的...
总之,AMF抓取Flex页面数据是一项涉及网络通信、数据解析和模拟用户行为的复杂任务。通过理解AMF协议和使用相应的工具,开发者可以有效地获取和分析Flex应用中的数据。在实践过程中,注意遵守道德和法律规定,保护...
支持AMF格式的通信封包编码、解码、向AMF服务端发送请求、返回AMF数据解析。 支持RTMP封包编码、解码。 支持Flex外部化类的AMF编码、解码。 支持解压还原LZMA算法压缩过的SWF文件(文件头三字节为:ZWS的 *.SWF...
3. **序列化与反序列化**:源码中的序列化功能允许将C++对象转换为AMF3格式的字节流,以便在网络中传输或存储。反序列化则是将接收到的AMF3数据转换回C++对象,便于程序处理。 4. **对象化处理**:AMF3能够识别和...
在 AMF3 中,对象是一组键值对集合。 ##### 3.13 XML 类型 XML 类型用于表示 XML 数据。不同于 XML 文档类型,XML 类型使用特殊的编码方式表示 XML 数据。 ##### 3.14 ByteArray 类型 ByteArray 类型用于表示...
7. **集成与扩展**:lua-amf库可以与其他Lua模块无缝集成,例如与网络通信库结合,实现完整的AMF3数据交换。同时,根据项目需求,可以扩展库的功能,比如添加对AMF0的支持,或者实现自定义数据类型的编码和解码。 8...
在Python中,处理AMF数据通常需要借助特定的库,这里提到的"amf.zip_AMF_amf_python"很可能是指一个针对Python 3.0及以上版本的AMF解析类库。 AMF数据格式有两种类型:AMF0(也称为AMF Lite)和AMF3,AMF3是AMF0的...
AMF格式提供了高效的数据传输,它能够将复杂的数据结构如对象、数组、日期等编码为二进制流,从而降低网络传输的负载。AMF分为两种版本:AMF0和AMF3,AMF3在效率和压缩率上优于AMF0,因此更常见于现代应用。 JSON...