【问题标题】:AMF message structure?AMF 消息结构?
【发布时间】:2010-12-02 17:19:13
【问题描述】:

Adobe 的documentation for the AMF format 似乎并未实际指定整个 AMF 消息的结构。它仅指定单个数据类型的格式。我已经读了五遍这该死的东西,要么我完全错过了实际的 AMF 消息应该包含的内容,要么它不存在。有谁知道实际的整个消息结构的任何文档?

【问题讨论】:

    标签: flash adobe amf


    【解决方案1】:

    规范可能被描述为“简洁”。

    AMF 编码使用称为“类型标记”的字节。整数的类型标记是值 4。整数数据紧跟此标记,长度为 1-4 个字节。长度会有所不同,因为整数类型是“压缩的”,因此值 0-127 只需要 1 个字节,而较大的值需要更多字节。这种整数格式被规范称为“U29”。

    例如,如果我们只是传递整数“5”,则有效的 AMF 数据包将是这两个字节:
    04 05

    在 Web 上的应用程序中,AMF 数据有时会以网络字节顺序编码为无符号长整数的长度开头。如果您正在观察这样的应用程序,您可能会看到:
    00 00 00 02 04 05,其中00 00 00 02 表示以下 AMF 数据长度为 2 个字节。

    现在,假设我们在具有以下构造函数后发送了一个对象:

    this.ui = "button_press"; this.param = 5;

    那么我们可能会在 AMF 数据中看到以下内容:

    0A - 对象标签
    2B - u29o-val:2 个密封成员,具有特征和数据的对象,可能是动态成员
    01 - 空字符串 - 匿名对象
    05 - 字符串值,字符串长度:2
    75 69 - 'ui'
    0B - 字符串值,字符串长度:5
    70 61 72 61 6D - 'param '
    19 - 字符串值,字符串长度:12
    62 75 74 74 6F 6E 5F 70 72 65 73 73 - 'button_press'
    04 - 整数
    05 - 整数值:5
    01 - 空名称,终止此对象的动态成员的空列表

    由于该数据包将占用 28 个字节,因此在野外遇到时可能会以:00 00 00 1C 为前缀。

    另一个需要考虑的可能性是 AMF 通信可能会被压缩,通常使用 zlib 中可用的“deflate”压缩。

    我希望这可以帮助您理清规范,但是如果您有问题,我会尽力回答。

    【讨论】:

    • 谢谢,很有帮助。我实际上希望在某个地方有一个完整的有效 AMF 消息的 BNF 描述,包括标题和诸如此类的东西;我浏览了 AMFPHP 的代码只是为了看看它在解码时做了什么,其中有很多东西在实际规范中甚至没有暗示,更不用说详细描述了。
    【解决方案2】:

    如果您正在寻找远程消息结构,则将其附加到 AMF0 spec 的末尾 - 第 4 节

    【讨论】:

      【解决方案3】:

      你也可以通过wiki http://en.wikipedia.org/wiki/Action_Message_Format 它有足够的信息需要。

      谢谢, 拉杰什。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-25
        • 1970-01-01
        • 1970-01-01
        • 2015-10-27
        • 2011-06-14
        • 2010-12-24
        • 2023-03-12
        • 1970-01-01
        相关资源
        最近更新 更多