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.

Foi útil?

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:

  1. O cliente exibe alguns interface do usuário e abre uma conexão TCP com o servidor.
  2. O servidor envia alguns dados para o cliente, que atualiza sua interface de usuário.
  3. Se o usuário faz um comando, o cliente envia alguns dados para o servidor através da conexão TCP.
  4. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top