Вопрос

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

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

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

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

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

Спасибо, что уделили мне время.

Это было полезно?

Решение

Единственная библиотека AMF, с которой я знаком, это ПиАМФ, с которым до сих пор было здорово работать.Вот ответы на ваши вопросы для 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.Ознакомьтесь с примеры чтобы увидеть, на что он способен и как выглядит код.

Другие советы

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

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

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

Для получения технической спецификации того, как объекты кодируются в двоичном формате, Adobe опубликовала спецификацию: Спецификация AMF 3.0 на 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.Он получает сообщение и передает управление соответствующей функции ответа.Это называется "отправкой сообщения".

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top