Pergunta

Estou tentando escrever um cliente de jogo muito simples para fazer alguma prática com o ActionScript 3 e a estrutura flexível.

Tenho alguns problemas com o seguinte código:

private function readResponse():void {
   var r:ByteArray =  new ByteArray();
   readBytes(r);
   while (r.bytesAvailable != 0)
   {
    try
    {
     var d:Object = r.readObject();
     protocol.execute(d); // do something with the object
    }
    catch (RangeError)
    {
     trace("Ouch, packet dismissed? Restlength:" + r.bytesAvailable);
    }
   }
  }

Parece funcionar bem no cliente na maioria das vezes, mas às vezes eu tenho um comportamento estranho que não deve ocorrer. Se eu olhar na saída do console, existem muitos pacotes "demitidos". Depois de registrar o resto do pacote descartado, parece muito um pacote quebrado e incompleto. Começa no meio de uma string, por exemplo, ocorre frequentemente se os dados forem enviados rapidamente a partir do servidor. No Serverside, cada um dos pacotes é enviado chamando a função client.send () relacionada.

Essa é a maneira errada de tentar lidar com mais de um objeto de entrada? Poderia ser um problema de servidor, fazendo com que os pacotes sejam enviados/incompletos?

Eu ficaria muito feliz se alguém pudesse me ajudar.

Pequena atualização, talvez isso ajude: registrei a duração dos dados enviados pela rede. O registro se parece com este (servidor | cliente):
208 | 208
92 | 92
208 | 208 214 | 214 & OUCH, pacote demitido? Restlength :: 212
148 | R.Bytesavilable: 388
27 | 388 & OUCH, pacote demitido? Restlength :: 384 etc ...

Parece que o servidor explode dados e o cliente está estragando tudo. O que eu poderia postar mais para obter ajuda com esse problema? Eu tenho que lavar a manualia de dados no servidor Python para fazer as coisas funcionarem certo? Não tenho muita certeza do que está acontecendo. Só sei que isso acontece principalmente se eu for muito mais cliente. cliente (porque obviamente não espera isso). Estou realmente preso a isso :(

PS: O servidor está escrito no Python com um soquete TCP e tópicos de cliente do tipo tutorial usual.

Nenhuma solução correta

Outras dicas

Se você está usando a AMF, não entendo por que você leria bytes de uma matriz binária?

Tente usar o RemoteObject e um manipulador de resposta (e eventualmente também um manipulador de erros)

Há um exemplo aqui: http://pyamf.org/tutorials/actionscript/simple.html#actionscript(que eu não tentei, pois não sou escavado em Python)

Fora isso, lembre -se de que os comandos são fogo e esquecem. A maior parte dos problemas encontrados ao lidar com o tráfego do servidor no Flex é causada por não registrar ouvintes de eventos etc. pr. Chamada de servidor.

Espero que ajude

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