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.

¿Fue útil?

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í:

  1. El cliente muestra alguna interfaz de usuario y abre una conexión TCP al servidor.
  2. El servidor envía algunos datos al cliente, que actualiza su interfaz de usuario.
  3. Si el usuario realiza un comando, el cliente envía algunos datos al servidor a través de la conexión TCP.
  4. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top