技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 网络系统 --> 网络传输协议AMF初探

网络传输协议AMF初探

浏览:1106次  出处信息

   AMF协议是Action Message Format协议的简称,AMF协议是Adobe公司的协议,主要用于数据交互和远程过程调用,在功能上与WebService相当,但AMF与WebService中的xml不同在于AMF是二进制数据,而xml是文本数据,AMF的传输效率比xml高。AMF使用http方式传输,目前主要用于ActionScript中,实现Flex与Service之间的通信。目前最新的版本是AMF3。

   AMF最大的特色在于可直接将Flash内置对象,例如Object, Array, Date, XML,传回服务器端,并且在服务器端自动进行解析成适当的对象,这就减轻了开发人员繁复工作,同时也更省了开发时间。目前支持的数据类型在AMF协议中对应的值是:

  • Number 0×00;

  • Boolean 0×01;

  • String 0×02;

  • Object 0×03;

  • MovieClip 0×04;

  • Null 0×05;

  • Undefined 0×06;

  • Reference 0×07;

  • ECMAArray 0×08;

  • ObjectEnd 0×09;

  • StrictArray 0x0a;

  • Date 0x0b;

  • LongString 0x0c;

  • Unsupported 0x0d;

  • Recordset 0x0e;

  • XMLObject 0x0f;

  • TypedObject(Class) 0×10;

  •    AMF协议是基于Http协议的,它的内容处理过程大致是这样:

  • 从客户端获取Http请求(Request)流;

  • 对流进行解串行化(Deserialize),得到服务器端程序能够识别的数据,并建立一个响应(Response)消息;

  • Debug开始;

  • 对流进行各种处理(记录、许可、服务)得到返回值;

  • 对响应流进行串行化;

  • 发送Http响应给客户端;

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

  • SOAP将数据处理成XML格式,相对于二进制的AFM太冗长了;

  • AMF能更有效序列化数据;

  • 因为AMF协议的初衷只是为了支持Flash ActionScript的数据类型,而SOAP却致力于提供更广泛的用途;

  • 在对Flash Player 6 的浏览器支持上AMF只需要4KB左右(压缩后)的大小,而SOAP就大多了;

  • SOAP的一些头部文件请求在Flash Player 6 不支持.

  •    由于AMF采用二进制编码,这种方式可以高度压缩数据,因此非常适合用来传递大量的资料。数据量越大,Flash Remoting的传输效能就越高,远远超过Web Service。至于XML,它使用纯文本的传输方式,效能就更不能与Flash Remoting相提并论了。

       介绍到这里应该还不清楚Flash如何通过AMF与数据库进行通信。具体的流程为:

       Flash(*.swf) <-> Server端程序(PHP,ASP.NET,Java,Python,Ruby..etc) <-> DB

       对于AMP,目前各种程序语言基本上都已经有了现成的框架,如PHP有AMFPHP/Zend_Amf,.NET有FluorineFx,Python有PyAMF,Ruby有RubyAMF。不管是哪种语言,流程上都差不多:

  • SWF连上指定的Gateway;

  • 请求Gateway上的service,并把所需的参数以AMF格式传给它;

  • 将执行结果回传。

  •    其他参考资料:http://en.wikipedia.org/wiki/Action_Message_Format

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1