AMF и AMF3 Технические характеристики - PullRequest
3 голосов
/ 05 декабря 2011

В настоящее время я работаю над небольшим адаптером AMF3 и поэтому пытаюсь реализовать протокол AMF3. К сожалению, имеющиеся спецификации, кажется, сильно отличаются от реальности (Captre для связи AMF с BlazeDS и посмотрите исходный код BlazeDS).

AMF0 Spec: http://opensource.adobe.com/wiki/download/attachments/1114283/amf0_spec_121207.pdf AMF3 Spec: http://opensource.adobe.com/wiki/download/attachments/1114283/amf3_spec_05_05_08.pdf

К сожалению, оба не указывают фактический формат сообщения (Заголовок, Тело, ...). Поэтому я поискал немного больше и пришел к статье в Википедии: http://en.wikipedia.org/wiki/Action_Message_Format

Эта статья, особенно части примера, похоже, описывают совершенно другой формат.

При рассмотрении связи и пошаговом выполнении кода BlazeDS я вижу, что сообщение утверждает, что оно является AMF3, но использует коды типа, как определено в AMF0 (0x0a - строгий массив вместо объекта, как определено в AMF3).

Может ли кто-нибудь объяснить мне этот беспорядок? В настоящее время я, вероятно, просто собираюсь использовать wireshark и код BlazeDS, чтобы каким-то образом перепроектировать описание протокола для меня, но я не знаю, почему ни одна действительная спецификация не доступна.

Ответы [ 2 ]

3 голосов
/ 06 сентября 2012

AMF по своей сути является просто форматом сериализации объектов ActionScript.

API-интерфейс NetConnection во Flash расширяется в этом формате, добавляя базовые функциональные возможности RPC через простую структуру запроса / ответа в теле заголовка / сообщения, которая описана в разделе 4.спецификации AMF 0Я думаю, что это дополнение RPC может сбить вас с толку, поскольку именно инфраструктура определяет, как отдельные полезные данные AMF-данных отправляются и принимаются с сервера.Эта оболочка не используется, например, для базовой сериализации объектов ActionScript через ByteArray.writeObject.Это дополнительная логика для связи на основе NetConnection с сервером.

См .: http://download.macromedia.com/pub/labs/amf/amf0_spec_121207.pdf

Данные ActionScript, фактически отправленные для значений заголовка или значений тела сообщения, кодируются в AMF.Все значения данных начинаются с AMF 0 для совместимости.Это может быть еще одним моментом, который сначала сбивает людей с толку при взгляде на базовую сериализацию AMF по сравнению с коммуникацией на основе NetConnection.Благодаря специальному расширению, добавленному в AMF 0, был введен новый маркер режима «AMF 3» 0x11, который переключает режим сериализации на AMF 3. Старые клиенты, которые не поддерживают AMF 3, не будут понимать этот новый маркер и прекратят обработку данных.,Это упомянуто в разделе 3 спецификации AMF 0.

Спецификация AMF 3 находится здесь: http://download.macromedia.com/pub/labs/amf/amf3_spec_121207.pdf

1 голос
/ 06 декабря 2011

Существует два основных типа обмена сообщениями AMF: RPC-вызовы в стиле AMF0 и RTMP. Вызовы AMF0 RPC состоят из версии, списка заголовков и списка сообщений, которые примерно соответствуют методам вызова. Это задокументировано в конце спецификации AMF0 и может использоваться для выполнения удаленных вызовов AMF0 или AMF3. Если вы используете Flex RemoteObject, в сообщении Flex используются некоторые дополнительные объекты-оболочки. Второй тип, на который ссылается статья в Википедии, - это формат сообщений, используемый RTMP, который представляет собой комбинацию AMF и его собственного пользовательского формата. Насколько я знаю, для этого формата нет спецификаций.

Как человек, который создал библиотеку, которая может анализировать AMF и выполнять вызовы RPC ( RocketAMF ), я бы посоветовал вам использовать одну из существующих библиотек, а не писать свою собственную, если вам просто нужна поддержка удаленного взаимодействия , Ниже приведен список некоторых библиотек для синтаксического анализа AMF по языкам, а также множество других простых поисков. Вы также можете попробовать Charles , который способен десериализовать запросы AMF, которые передаются через него через прокси, что немного упрощает реверс-инжиниринг.

...