AMF简介
ActionScript是Flash中的开发语言,而AMF(Action Message Format)是ActionScript的二进制消息协议。
AMF协议
目前有2各版本,版本0与版本3,版本3是在版本0的基础上进行扩展而来。
第三方支持AMF协议的列表
这里仅仅关注.NET平台,其中目前为止(2015年12月1日),NET平台AMF.NET在0.3版本停止维护;FluorineFx仅对Flex Data Services部分支持。
Flex与AMF关系
目前Flex版本4.6之前属于adobe;4.7之后为apache
adobe的ActionScript文档 包含4.6之前的版本
apache的ActionScript文档 最新版本(4.14)
Flex定位为RIA,运行于Flash Player、AIR、Flash Lite客户端,服务器则由LiveCycle Data Services解决交互问题。
FDS全称Flex Data Services,Adobe将其改名为LiveCycle Data Services(LC DS),LiveCycle ES是Adobe企业解决方案平台,LC DS则是其中的一个组件,Blaze Data Service(BlazeDS)则是LiveCycle Data Services中实现远程对象调用、Web消息通讯的JAVA开源实现。
对应的BlazeDS 3、4早期版本为adobe;BlazeDS 4.7以上版本为apache;
Flex 4.6 blazeds 3.x源码 Flex 4.6 blazeds 4.x源码
所以LC DS和BlazeDS中都有AMF的相关实现;另有JAVA的客户端实现JAVA AMF Client
AMF中的常见消息
DSMessage
真正会出现在AMF中被序列化为二进制的消息有以下几种
- 代号(类名{父类+Ext后缀})
- DSA(AsyncMessageExt)
- DSK(AcknowledgeMessageExt)
- DSC(CommandMessageExt)
- DSD(DataMessageExt)
- DSP(PagedMessageExt)
- DSQ(SequencedMessageExt)
- DSU(UpdateCollectionMessageExt)
这些消息类都同名父类消息的可序列化子类,所以实现Externalizable序列化接口、 ClassAlias获得消息代号接口。而父类Message均实现Message接口,现在根据封装包不同分为2种消息:
CoreMessage
- AbstractMessage
- AsyncMessage
- AcknowledgeMessage
- CommandMessage
- ErrorMessage
BlazeDS/LC DS封装在flex-messaging-core.jar/flex.messaging.messages包中(AEP DS4.6文档 LC DS4.6文档 LC DS4.7文档 ADEP 文档);
Flex(Adobe Digital Enterprise Platform Data Services for Java EE)封装在mx.messaing.messages包中(4.6文档 4.7文档)。
DataMessage
- SequencedMessage
- PagedMessage
- DataMessage
- UpdateCollectionMessage
LC DS封装封装在flex-messaging-data.jar/flex.data.messages包(文档中是没有的LC DS文档 ADEP文档)
Flex(Adobe Digital Enterprise Platform Data Services for Java EE)封装在mx.data.messages包中(4.6文档)
各个类库对于DSMessage的支持
BlazeDS/LC DS
LC DS是支持最为完整,其Message继承关系如下,DSMessage省略:
AbstractMessage
AsyncMessage
CommandMessage
AcknowledgeMessage
SequencedMessage
PagedMessage
DataMessage
UpdateCollectionMessage
AMF.NET
AMF.NET无Message
DotAMF
DotAmf无Message
amfmessaging
amfmessaging支持部分Message
FluorineFx
fluorinefx有CoreMessage、DataMessage,缺少DSMessage支持。除AbstractMessage被命名为MessageBase外,其他名称与包名与LC DS一致,其Message继承如下:
MessageBase(AbstractMessage)
AsyncMessage
CommandMessage
AcknowledgeMessage
SequencedMessage
PagedMessage
DataMessage
UpdateCollectionMessage
Charles
CharlesJava平台下的HTTP调试监控软件,自带支持DSMesage,在原有Message名称中添加DS,全部封装到com.xk72.amf.externalizable包下:
AbstractDSMessage
CommandDSMessage
AsyncDSMessage
AcknowledgeDSMessage
SequencedDSMessage
PagedDSMessage
DataDSMessage
UpdateCollectionDSMessage
AMFParser
AMFParserFiddler的一款插件,自带AMF解析算法,没有支持Message
FiddlerAmfParser
FiddlerAmfParserFiddler的一款插件,是利用FluorineFx解析AMF协议的,故不支持DSMessage解析
FiddlerAmfParser_DSMessageOutputProcessor
FiddlerAmfParser_DSMessageOutputProcessor是本人针对FiddlerAmfParser制作的一款增强插件,用于支持DSMessage解析
文章参考
LiveCycle ES vs LiveCycle DS vs BlazeDS – clearing up the confusion
你好,我有一段amf解析不出来,能帮我看一下么
赞赞
使用我的插件解析不出来,可以先试试Charles看看能不能解析
赞赞