IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

网络传输协议AMF初探

标点符 2013-09-07 15:16:53 累计浏览 1,636 次
本机暂存

   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

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. Linux大棚版Thrift入门教程 (累计阅读 24,505)
  2. 浅析http协议、cookies和session机制、浏览器缓存 (累计阅读 17,446)
  3. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (累计阅读 15,933)
  4. libcurl的使用总结(二) (累计阅读 15,083)
  5. 使用python爬虫抓站的一些技巧总结:进阶篇 (累计阅读 13,301)
  6. HTTP协议Keep-Alive模式详解 (累计阅读 12,103)
  7. 你必须了解的Session的本质 (累计阅读 11,440)
  8. curl 命令使用cookie (累计阅读 10,015)
  9. Hello! 404 (累计阅读 9,384)
  10. 解决 nginx 反向代理网页首尾出现神秘字符的问题 (累计阅读 9,094)