对Flash比较熟悉的朋友可能知道AMF协议。这个协议的使用更多地是在一些资料处理等方面的领域。但是这个协议也仍然是基于Http协议的。那么我们现在就来简单了解一下有关AMF这个协议的具体情况吧。
基于Http协议的AMF协议
它的内容处理过程大致是这样:
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;
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的传输方式自然也无可比拟。