¿Cómo funciona la comunicación AMF?
-
07-07-2019 - |
Pregunta
¿Cómo se comunica Flash con los servicios / scripts en los servidores a través de AMF ?
Con respecto a las bibliotecas AMF para Python / Perl / PHP que son más fáciles de desarrollar que .NET / Java:
- ¿ejecutan archivos de script cada vez que Flash envía una llamada a procedimiento remoto? ¿
- o se comunican a través de sockets a clases de script que se ejecutan como servicios?
Con respecto a la funcionalidad típica de AMF:
- ¿Cómo se transfieren los datos? ¿Es por argumentos de método que se serializan automáticamente?
- ¿Cómo pueden los servidores " push " a los clientes? ¿Las películas Flash tienen que conectarse en un enchufe?
Gracias por su tiempo.
Solución
La única biblioteca de AMF con la que estoy familiarizado es PyAMF , que ha sido excelente para trabajar hasta ahora. Aquí están las respuestas a sus preguntas para PyAMF:
-
Me imagino que puede ejecutarlo como un script (¿quiere decir como CGI?), pero la OMI más fácil es configurar un servidor de aplicaciones específicamente para solicitudes AMF
-
la forma más fácil es definir funciones en Python puro, que PyAMF envuelve para serializar datos AMF entrantes / salientes
-
puede comunicarse a través de sockets si eso es lo que necesita hacer, pero de nuevo, es la forma más fácil de usar funciones de Python puras; un uso para los sockets es mantener una conexión abierta y 'enviar' datos a los clientes, vea este ejemplo
Aquí hay un ejemplo de tres servicios AMF simples que se sirven en 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()
Definitivamente recomendaría PyAMF. Consulte los ejemplos para ver de qué es capaz y cómo se ve el código.
Otros consejos
¿Cómo se comunica Flash con los servicios / scripts en los servidores a través de AMF?
Los datos se transfieren a través de una conexión TCP / IP. A veces se usa una conexión HTTP existente, y en otros casos se abre una nueva conexión TCP / IP para los datos AMF. Cuando se abren las conexiones HTTP o TCP adicionales, probablemente se usa la interfaz de sockets. El AMF definitivamente viaja a través de una conexión TCP de algún tipo, y la interfaz de sockets es prácticamente la única forma de abrir dicha conexión.
Los "datos" que se transfiere consta de tipos de datos ECMA-script (Javascript (tm)) tales como "entero", "cadena", "objeto", y así sucesivamente.
Para una especificación técnica de cómo se codifican los objetos en binario, Adobe ha publicado una especificación: Especificaciones AMF 3.0 en Adobe.com
Generalmente, la forma en que funciona un sistema cliente / servidor que usa AMF es algo así:
- El cliente muestra alguna interfaz de usuario y abre una conexión TCP al servidor.
- El servidor envía algunos datos al cliente, que actualiza su interfaz de usuario.
- Si el usuario realiza un comando, el cliente envía algunos datos al servidor a través de la conexión TCP.
- Continúe los pasos 2-3 hasta que el usuario salga.
Por ejemplo, si el usuario hace clic en " enviar correo " botón en la interfaz de usuario, entonces el código del cliente podría hacer esto:
public class UICommandMessage extends my.CmdMsg { public function UICommandMessage(action:String, arg: String) { this.cmd = action; this.data = String; } }
Luego más tarde:
UICommandMessage msg = new UICommandMessage("Button_Press", "Send_Mail"); server_connection.sendMessage(msg);
en el código del servidor, el servidor también está monitoreando la conexión para el objeto AMF entrante. Recibe el mensaje y pasa el control a una función de respuesta adecuada. Esto se llama "enviar un mensaje".
Con más información sobre lo que está tratando de lograr, podría darle más detalles útiles.