2009-09-30 2 views
5

Adobe documentation for the AMF format, по-видимому, не указывает структуру всего сообщения AMF. Он определяет только формат отдельных типов данных. Я прочитал эту чертову пять раз, и либо я просто полностью не понимаю, что должно содержать фактическое сообщение AMF, или его нет. Кто-нибудь знает какую-либо документацию о фактической структуре всего сообщения?AMF структура сообщений?

ответ

9

Спецификация может быть описана как «краткая».

Кодирование AMF использует байты, которые называются «маркеры типов». Маркер типа для целого числа - это значение 4. Целочисленные данные сразу следуют за этим тегом и составляют 1-4 байта. Длина изменяется, потому что целочисленный тип «сжимается», так что значения 0-127 требуют только 1 байт, а для больших значений требуется больше байтов. Этот целочисленный формат называется спецификацией «U29».

В качестве примера, если бы мы просто передать целое число «5», действительный АИФ пакет будет эти два байта:
04 05

В приложениях, найденных в Интернете, АИФ данных иногда предшествует по длине, закодированной как беззнаковый длинный порядок сетевых байтов. Если вы наблюдали такое приложение, вы можете увидеть:
00 00 00 02 04 05, где 00 00 00 02 указывает, что следующие данные AMF имеют длину 2 байта.

Теперь предположим, что мы послали объект после того, как он имел следующий конструктор:

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

Тогда мы могли бы увидеть следующее в АИФ данных:

0A - Тег объекта
2B - u29o-val: 2 закрытых элемента, объект с чертами и данными, возможно динамические элементы
01 - пустая строка - анонимный объект
05 - строка по значению, длина строки: 2
75 69 - 'щ'
0B - строка по значению, длина строки: 5
70 61 72 61 6D - 'парам'
19 - строка по значению , длина строки: 12
62 75 74 74 6F 6E 5F 70 72 65 73 73 - 'button_press'
04 - целое
05 - значение целого числа: 5
01 - пустое имя, завершает пустой список динамических меня mbs этот объект

Поскольку этот пакет займет 28 байт, он может иметь префикс: 00 00 00 1C, когда встречается в дикой природе.

Другая возможность рассмотрения заключается в том, что связь AMF может быть сжата, как правило, используя сжатие «спуска», доступное в zlib.

Надеюсь, это поможет вам разобраться в спецификации, но если у вас есть вопросы, я постараюсь ответить на них.

+0

Спасибо, очень полезно. Я действительно надеялся, что где-то есть описание BNF всего действительного сообщения AMF, включая заголовки и многое другое; Я прошел через код для AMFPHP, чтобы увидеть, что он делает, когда он расшифровывается, и там было много чего, что даже не было намечено в реальной спецификации, не говоря уже о подробностях. – dirtside

1

Если вы ищете ремоутинг структуры сообщения оно добавляется к концу AMF0 spec - Раздел 4

Смежные вопросы