Come funziona la comunicazione AMF?
-
07-07-2019 - |
Domanda
In che modo Flash comunica con servizi / script sui server tramite AMF ?
Per quanto riguarda le librerie AMF per Python / Perl / PHP che sono più facili da sviluppare di .NET / Java:
- eseguono file di script ogni volta che Flash invia una chiamata di procedura remota?
- o comunicano tramite socket, alle classi di script in esecuzione come servizi?
Per quanto riguarda la funzionalità AMF tipica:
- Come vengono trasferiti i dati? è tramite argomenti di metodo che vengono automaticamente serializzati?
- Come possono i server " spingere " ai clienti? i filmati Flash devono essere collegati su una presa?
Grazie per il tuo tempo.
Soluzione
L'unica libreria AMF con cui ho familiarità è PyAMF , con cui è stato fantastico lavorare finora. Ecco le risposte alle tue domande per PyAMF:
-
Immagino che tu possa eseguirlo come uno script (intendi come CGI?), ma l'IMO più semplice è configurare un server app appositamente per le richieste AMF
-
il modo più semplice è definire le funzioni in puro pitone, che PyAMF racchiude per serializzare i dati AMF in entrata / uscita
-
puoi comunicare tramite socket se è quello che devi fare, ma, ancora una volta, è il più semplice da usare con le funzioni Python; un uso per i socket è mantenere una connessione aperta e "inviare" i dati ai client, vedere questo esempio
Ecco un esempio di tre semplici servizi AMF offerti su 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()
Consiglio vivamente PyAMF. Dai un'occhiata agli esempi per vedere di cosa è capace e che aspetto ha il codice.
Altri suggerimenti
In che modo Flash comunica con servizi / script sui server tramite AMF?
I dati vengono trasferiti su una connessione TCP / IP. A volte viene utilizzata una connessione HTTP esistente e in altri casi viene aperta una nuova connessione TCP / IP per i dati AMF. Quando vengono aperte le connessioni HTTP o TCP aggiuntive, viene probabilmente utilizzata l'interfaccia socket. L'AMF viaggia sicuramente su una connessione TCP di qualche tipo e l'interfaccia dei socket è praticamente l'unico modo per aprire tale connessione.
I " dati " che viene trasferito è costituito da tipi di dati script ECMA (Javascript (tm)) come "intero", "stringa", "oggetto" e così via.
Per una specifica tecnica di come gli oggetti sono codificati in binario, Adobe ha pubblicato una specifica: Specifiche AMF 3.0 su Adobe.com
Generalmente il modo in cui funziona un sistema client / server che utilizza AMF è qualcosa del genere:
- Il client visualizza alcune interfacce utente e apre una connessione TCP al server.
- Il server invia alcuni dati al client, che aggiorna la sua interfaccia utente.
- Se l'utente effettua un comando, il client invia alcuni dati al server tramite la connessione TCP.
- Continua i passaggi 2-3 fino a quando l'utente non esce.
Ad esempio, se l'utente fa clic su " invia posta " pulsante nell'interfaccia utente, quindi il codice client potrebbe eseguire questa operazione:
public class UICommandMessage extends my.CmdMsg { public function UICommandMessage(action:String, arg: String) { this.cmd = action; this.data = String; } }
Quindi:
UICommandMessage msg = new UICommandMessage("Button_Press", "Send_Mail"); server_connection.sendMessage(msg);
nel codice del server, il server sta monitorando anche la connessione per l'oggetto AMF in arrivo. Riceve il messaggio e passa il controllo a una funzione di risposta appropriata. Questo si chiama " invio di un messaggio " ;.
Con ulteriori informazioni su ciò che stai cercando di realizzare, potrei fornirti dettagli più utili.