简析AMF协议的内容处理流程


对Flash比较熟悉的朋友可能知道AMF协议。这个协议的使用更多地是在一些资料处理等方面的领域。但是这个协议也仍然是基于Http协议的。那么我们现在就来简单了解一下有关AMF这个协议的具体情况吧。

基于Http协议的AMF协议

它的内容处理过程大致是这样:

1.从客户端获取Http请求(Request)流.

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

3.Debug开始

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

5.对响应流进行串行化

6.发送Http响应给客户端

Flash ActionScript数据类型在AMF协议中对应的值是:

  1. Number 0x00;  
  2. Boolean 0x01;  
  3. String 0x02;  
  4. Object 0x03;  
  5. MovieClip 0x04;  
  6. Null 0x05;  
  7. Undefined 0x06;  
  8. Reference 0x07;  
  9. ECMAArray 0x08;  
  10. ObjectEnd 0x09;  
  11. StrictArray 0x0a;  
  12. Date 0x0b;   
  13. LongString 0x0c;   
  14. Unsupported 0x0d;   
  15. Recordset 0x0e;   
  16. XMLObject 0x0f;   
  17. TypedObject(Class) 0x10;  

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的传输方式自然也无可比拟。

相关内容