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
分享到:
相关推荐
如果使用dubbo遇到错误:com.alibaba.dubbo.remoting.RemotingException: Fail to decode request due to: RpcInvocation 请下载这个jar,替换掉你项目中的那个jar,应该可以解决。
Flash Remoting官方帮助手册
Remoting.IO允许服务远程导出方法。 服务只是简单的原型 Javascript 类,它定义了许多可以远程调用的方法。 因为Engine.IO是面向连接的,所以服务是有状态的。 这意味着会话数据可以跨服务和方法调用保持。 ...
可可描述CocoaAMF是一组类,可以进行AMF0和AMF3远程调用或充当服务器来处理AMF请求。例子有关发送远程呼叫的信息,请参见SimpleRemotingCallExample。 有关设置服务器的信息,请参见ServerExample。 为了测试现有的...
VB_NET Remoting 技术手册
分布式,C/S,B/S系统连接高级技术手册,非常基础,从简到难说明了Remoting技术开发,连接远程服务器简单等,宝典丛书...
flash remoting mx 用于flash数据库编程
VB.NET Remoting 技术手册VB.NET Remoting 技术手册
使用FluorineFx和Flash Remoting+net.pdf
.Net Remoting技术.pdf
讲解Remoting的概念及其与WEB的区别,给出实例并讲解
在.Net中,我们可以通过Web Service 或者Remoting 技术构建分布式应用程序(除此还有新一代的WCF,Windows Communication Foundation)。本系列文章将简单介绍Remoting的一些基本概念,包括 应用程序域、Remoting构架...
.NET Core,.NET 5和更高版本的远程处理正在开发中
C.net环境下分布式系统的Remoting技术实现
C# Remoting技术的完整实例。 包括GUC共享程序集的引用;通过配置文件动态加载时的详细设置(一般例子不会给出详细的文件配置,这是经过几天公关总结出来的,很珍贵!)。
Microsoft .Net Remoting系列专题之三:Remoting事件处理全接触
1.Net Remoting(应用程序域) 2.Net Remoting(基本操作) 3.Net Remoting(分离服务程序实现) 4.Net Remoting(远程方法回调) 5.細細品味C#(Remoting專題) 1.1、版权声明.............................................
Remoting技术,不同程序之间访问,修改其他程序数据。
.NET Remoting技术构建分布式,for Microsoft .net的例子程序. welcome to download for test it!