Question

Comment Flash communique-t-il avec les services / scripts sur les serveurs via AMF ?

Concernant les bibliothèques AMF pour Python / Perl / PHP faciles à développer que .NET / Java:

  • exécutent-ils les fichiers de script chaque fois que Flash envoie un appel de procédure distante?
  • ou communiquent-ils via des sockets, aux classes de script exécutées en tant que services?

En ce qui concerne les fonctionnalités classiques de l'AMF:

  • Comment les données sont-elles transférées? est-ce par des arguments de méthode automatiquement sérialisés?
  • Comment les serveurs peuvent-ils " envoyer ? " aux clients? les films Flash doivent-ils être connectés sur une prise?

Merci de votre temps.

Était-ce utile?

La solution

La seule bibliothèque AMF que je connaisse est PyAMF , avec laquelle il a été agréable de travailler. Voici les réponses à vos questions pour PyAMF:

  • J'imagine que vous pouvez l'exécuter sous forme de script (vous voulez dire comme CGI?), mais le moyen le plus simple d'IMO est de configurer un serveur d'applications spécifiquement pour les demandes AMF

  • le moyen le plus simple est de définir des fonctions en python pur, qu’encapsule PyAMF pour sérialiser les données AMF entrantes / sortantes

  • vous pouvez communiquer via des sockets si c'est ce que vous devez faire, mais encore une fois, il est plus simple d'utiliser des fonctions Python pures; L’une des utilisations possibles des sockets est de conserver une connexion ouverte et de transmettre des données aux clients, voir cet exemple

Voici un exemple de trois services AMF simples desservis par 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()

Je recommanderais certainement PyAMF. Consultez les exemples pour voir ce dont il est capable et à quoi ressemble le code.

Autres conseils

  

Comment Flash communique-t-il avec les services / scripts sur les serveurs via AMF?

Les données sont transférées via une connexion TCP / IP. Parfois, une connexion HTTP existante est utilisée et, dans d'autres cas, une nouvelle connexion TCP / IP est ouverte pour les données AMF. Lorsque les connexions HTTP ou TCP supplémentaires sont ouvertes, l'interface de socket est probablement utilisée. L’AMF se déplace définitivement sur une connexion TCP, et l’interface de sockets est pratiquement le seul moyen d’ouvrir une telle connexion.

Les " données " qui est transféré est constitué de types de données ECMA-script (Javascript (tm)), tels que "entier", "chaîne", "objet", etc., ainsi de suite.

Pour une spécification technique de la manière dont les objets sont codés en binaire, Adobe a publié une spécification: Spéc. AMF 3.0 sur Adobe.com

Généralement, le fonctionnement d'un système client / serveur utilisant l'AMF ressemble à ceci:

  1. Le client affiche une interface utilisateur et ouvre une connexion TCP au serveur.
  2. Le serveur envoie des données au client, qui met à jour son interface utilisateur.
  3. Si l'utilisateur effectue une commande, le client envoie certaines données au serveur via la connexion TCP.
  4. Continuez les étapes 2 et 3 jusqu'à ce que l'utilisateur quitte.

Par exemple, si l'utilisateur clique sur un " envoyer un courrier " bouton dans l'interface utilisateur, le code client peut alors:

public class UICommandMessage extends my.CmdMsg
{
   public function UICommandMessage(action:String, arg: String)
   {
      this.cmd = action;
      this.data = String;
   }
}

Puis plus tard:

UICommandMessage msg = new UICommandMessage("Button_Press", "Send_Mail");
server_connection.sendMessage(msg);

dans le code serveur, le serveur surveille également la connexion pour les objets AMF entrants. Il reçoit le message et passe le contrôle à une fonction de réponse appropriée. Cela s'appelle "envoyer un message".

Avec plus d'informations sur ce que vous essayez d'accomplir, je pourrais vous donner plus de détails utiles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top