Как работает связь AMF? - PullRequest
       21

Как работает связь AMF?

4 голосов
/ 14 сентября 2009

Как Flash взаимодействует со службами / скриптами на серверах через AMF ?

Относительно библиотек AMF для Python / Perl / PHP, которые легче разрабатывать, чем .NET / Java:

  • исполняют ли они файлы сценариев всякий раз, когда Flash отправляет удаленный вызов процедуры?
  • или они общаются через сокеты с классами сценариев, которые выполняются как службы?

Относительно типичной функциональности AMF:

  • Как передаются данные? это аргументы метода, которые автоматически сериализуются?
  • Как серверы " push " для клиентов? Flash-фильмы должны подключаться к розетке?

Спасибо за ваше время.

Ответы [ 2 ]

8 голосов
/ 14 сентября 2009

Единственная библиотека AMF, с которой я знаком, это PyAMF , с которой до сих пор было здорово работать. Вот ответы на ваши вопросы для PyAMF:

  • Я мог бы представить, что вы можете запустить его как скрипт (вы имеете в виду CGI?), Но самое простое IMO - настроить сервер приложений специально для запросов AMF

  • самый простой способ - определить функции в чистом Python, которые PyAMF переносит для сериализации входящих / исходящих данных AMF

  • вы можете общаться через сокеты, если это то, что вам нужно сделать, но, опять же, проще всего использовать чистые функции Python; одно из применений для сокетов - поддерживать открытое соединение и передавать данные клиентам, см. этот пример

Вот пример трех простых служб AMF, обслуживаемых на localhost:8080:

from wsgiref import simple_server
from pyamf.remoting.gateway.wsgi import WSGIGateway

## amf services ##################################################

def echo(data):
    return data

def reverse(data):
    return data[::-1]

def rot13(data):
    return data.encode('rot13')

services = {
    'myservice.echo': echo,
    'myservice.reverse': reverse,
    'myservice.rot13': rot13,
}

## server ########################################################

def main():
    app = WSGIGateway(services)

    simple_server.make_server('localhost', 8080, app).serve_forever()

if __name__ == '__main__':
    main()

Я бы определенно рекомендовал PyAMF. Посмотрите примеров , чтобы увидеть, на что он способен и как выглядит код.

4 голосов
/ 13 октября 2009

Как Flash взаимодействует со службами / скриптами на серверах через AMF?

Данные передаются через соединение TCP / IP. Иногда используется существующее HTTP-соединение, а в других случаях открывается новое TCP / IP-соединение для данных AMF. Когда HTTP или дополнительные соединения TCP открыты, вероятно, используется интерфейс сокетов. AMF определенно путешествует через какое-то TCP-соединение, и интерфейс сокетов - практически единственный способ открыть такое соединение.

Передаваемые «данные» состоят из типов данных сценария ECMA (Javascript (tm)), таких как «целое число», «строка», «объект» и т. Д.

Для технической спецификации того, как объекты кодируются в двоичном формате, Adobe опубликовала спецификацию: AMF 3.0 Spec на Adobe.com

Обычно система клиент / сервер, использующая AMF, выглядит примерно так:

  1. Клиент отображает некоторый пользовательский интерфейс и открывает TCP-соединение с сервером.
  2. Сервер отправляет некоторые данные клиенту, который обновляет его пользовательский интерфейс.
  3. Если пользователь выполняет команду, клиент отправляет некоторые данные на сервер по TCP-соединению.
  4. Продолжайте шаги 2-3, пока пользователь не выйдет.

Например, если пользователь нажимает кнопку «отправить почту» в пользовательском интерфейсе, код клиента может сделать это:

public class UICommandMessage extends my.CmdMsg
{
   public function UICommandMessage(action:String, arg: String)
   {
      this.cmd = action;
      this.data = String;
   }
}

Потом позже:

UICommandMessage msg = new UICommandMessage("Button_Press", "Send_Mail");
server_connection.sendMessage(msg);

в коде сервера, сервер также контролирует соединение для входящего объекта AMF. Он получает сообщение и передает управление соответствующей функции ответа. Это называется «отправка сообщения».

С более подробной информацией о том, чего вы пытаетесь достичь, я мог бы дать вам более полезную информацию.

...