Как работает AMF-коммуникация?
-
07-07-2019 - |
Вопрос
Как 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, выглядит примерно так:
- Клиент отображает некоторый пользовательский интерфейс и открывает TCP-соединение с сервером.
- Сервер отправляет некоторые данные клиенту, который обновляет свой пользовательский интерфейс.
- Если пользователь выполняет команду, клиент отправляет некоторые данные на сервер по TCP-соединению.
- Продолжайте выполнять шаги 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.Он получает сообщение и передает управление соответствующей функции ответа.Это называется "отправкой сообщения".
Имея больше информации о том, чего вы пытаетесь достичь, я мог бы предоставить вам более полезные подробности.