Como funciona a comunicação AMF?
-
07-07-2019 - |
Pergunta
Como o flash comunicar com serviços / scripts em servidores via AMF ?
Em relação ao AMF bibliotecas para Python / Perl / PHP, que são mais fáceis de desenvolver de .NET / Java:
- fazer eles executam arquivos de script, sempre que o Flash envia um Remote Procedure Call?
- ou eles se comunicam via soquetes, para classes de script que estão sendo executados como serviços?
No que diz respeito funcionalidade AMF típico:
- Como os dados são transferidos? é por argumentos de método que são automaticamente serializado?
- Como pode servidores " impulso " para os clientes? filmes Do Flash têm de se conectar a uma tomada?
Obrigado pelo seu tempo.
Solução
A única biblioteca AMF Estou familiarizado com é PyAMF , que tem sido ótimo trabalhar com até agora. Aqui estão as respostas para as suas perguntas para PyAMF:
-
Eu imagino que você pode executá-lo como um script (que quer dizer como CGI?), Mas o mais fácil IMO é a criação de um servidor de aplicações especificamente para solicitações AMF
-
a maneira mais fácil é a definir as funções em python puro, que PyAMF envolve a serializar dados AMF de entrada / saída
-
Você pode se comunicar via soquetes se é isso que você precisa fazer, mas, novamente, é o mais fácil de usar funções Python puro; um uso para soquetes é manter uma conexão aberta e os dados 'push' para os clientes, consulte este exemplo
Aqui está um exemplo de três serviços AMF simples de ser servido em 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()
Eu recomendaria definitivamente PyAMF. Confira o exemplos para ver o que é capaz e que os olhares de código semelhante.
Outras dicas
Como o flash comunicar com serviços / scripts em servidores via AMF?
Os dados são transferidos através de uma conexão TCP / IP. Às vezes uma conexão HTTP existente é usado, e em outros casos uma nova conexão TCP / IP é aberto para os dados AMF. Quando o HTTP ou adicionais conexões TCP são abertas, a interface de soquetes é provavelmente usado. A AMF definitivamente viaja através de uma conexão TCP de algum tipo, e a interface de soquetes é praticamente a única forma de conexão tal aberto.
Os "dados" que são transferidos consiste em ECMA-script (Javascript (tm)) tipos de dados, tais como "integer", "string", "objeto", e assim por diante.
Para uma especificação técnica de como os objetos são codificados em binário, Adobe publicou uma especificação: AMF 3,0 Spec em Adobe.com
Geralmente a forma como um sistema cliente / servidor usando AMF funciona é algo como isto:
- O cliente exibe alguns interface do usuário e abre uma conexão TCP com o servidor.
- O servidor envia alguns dados para o cliente, que atualiza sua interface de usuário.
- Se o usuário faz um comando, o cliente envia alguns dados para o servidor através da conexão TCP.
- Repita os passos 2-3 até que o usuário sai.
Por exemplo, se o usuário clica em um botão "Enviar e-mail" na interface do usuário, em seguida, o código do cliente pode fazer isso:
public class UICommandMessage extends my.CmdMsg { public function UICommandMessage(action:String, arg: String) { this.cmd = action; this.data = String; } }
Então, mais tarde:
UICommandMessage msg = new UICommandMessage("Button_Press", "Send_Mail"); server_connection.sendMessage(msg);
no código do servidor, o servidor está monitorando a conexão, bem como para objeto AMF entrada. Ele recebe a mensagem, e passa o controlo para uma função de resposta apropriada. Isso é chamado de "despachar uma mensagem".
Com mais informações sobre o que você está tentando realizar, eu poderia dar-lhe detalhes mais úteis.