2009-09-14 1 views
4

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

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

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

Что касается типичных АИФ функциональности:

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

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

ответ

8

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

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

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

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

Вот пример из трех простых АИФ услуг обслуживаемых на 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. Просмотрите examples, чтобы увидеть, на что он способен, и на что похож код.

4

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

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

Передаваемые данные состоят из типов данных ECMA-скрипта (Javascript (tm)), таких как «integer», «string», «object» и т. Д.

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

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