2009-09-14 7 views
4

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

En ce qui concerne le AMF libraries pour Python/Perl/PHP qui sont plus faciles à développer que .NET/Java:

  • execute-ils des fichiers de script, chaque fois que flash envoie un appel de procédure à distance?
  • ou communiquent-ils via des sockets pour écrire des classes qui s'exécutent en tant que services?

En ce qui concerne la fonctionnalité AMF typique:

  • Comment est transféré des données? est-ce par des arguments de méthode qui sont automatiquement sérialisés?
  • Comment les serveurs "push" aux clients? les films Flash doivent-ils se connecter sur une prise?

Merci pour votre temps.

Répondre

8

La seule bibliothèque AMF que je connais est PyAMF, ce qui a été très bien de travailler avec jusqu'à présent. Voici les réponses à vos questions pour PyAMF:

  • Je suppose que vous pouvez l'exécuter comme un script (voulez-vous dire comme CGI?), Mais le plus simple est de l'OMI à mettre en place un serveur d'application spécifiquement pour AMF demande

  • le plus simple est de définir des fonctions en python pur, qui PyAMF enveloppe sérialiser données AMF entrant/sortant

  • vous pouvez communiquer avec les sockets si c'est ce que vous devez faire, mais encore une fois, il est le plus simple à utiliser les fonctions Python pures; une utilisation pour les sockets est de garder une connexion ouverte et les données « push » aux clients, voir this exemple

Voici un exemple de trois services simples AMF signifiés à 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 voudrais recommande vraiment PyAMF. Découvrez le examples pour voir de quoi il est capable et à quoi ressemble le code.

4

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 Sockets est probablement utilisée. L'AMF passe certainement par une sorte de connexion TCP, et l'interface Sockets est pratiquement le seul moyen d'ouvrir une telle connexion. Les "données" transférées sont des types de données ECMA-script (Javascript (tm)) tels que "integer", "string", "object", et ainsi de suite.

Pour une spécification technique de la façon dont les objets sont codés en binaire, Adobe a publié une spécification: AMF 3.0 Spec at Adobe.com

En général, la façon dont un système client en utilisant AMF/serveur fonctionne est quelque chose comme ceci:

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

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

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 l'objet AMF entrant. Il reçoit le message et transmet le contrôle à une fonction de réponse appropriée. C'est ce qu'on appelle "l'envoi d'un message".

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