Domanda

Sto cercando di scrivere un client di gioco molto semplice per fare pratica con Actionscript 3 e Flex Framework.

Ho alcuni problemi con il seguente codice:

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);
    }
   }
  }

Sembra funzionare bene nel client per la maggior parte del tempo, ma a volte ho un comportamento strano che non dovrebbe verificarsi.Se guardo l'output della console, ci sono molti pacchetti "scartati".Una volta registrato il resto del pacchetto scartato, sembra molto un pacchetto rotto e incompleto.Inizia nel mezzo di una stringa, ad es.Si verifica spesso se i dati vengono inviati rapidamente dal server.Sul lato server, ciascuno dei pacchetti viene inviato chiamando la relativa funzione client.send().

È questo il modo sbagliato per provare a gestire più di un oggetto in arrivo?Potrebbe trattarsi di un problema lato server, che causa l'invio di pacchetti in formato errato/incompleto?

Sarei molto felice se qualcuno potesse aiutarmi.

Piccolo aggiornamento, forse questo aiuta:Ho registrato la lunghezza dei dati inviati sulla rete.Il log si presenta così (server | client):
208 | 208
92 | 92
208 | 208 214 | 214 e ahi, pacchetto licenziato?Riposo::212
148 | R.Bytesavailable:388
27 | 388 e ouch, pacchetto licenziato?Riposo::384 ecc ...

Sembra che il server effettui un burst dei dati e il client stia facendo confusione.Cosa potrei pubblicare di più per ottenere aiuto con questo problema?Devo svuotare manualmente i dati sul server Python per far funzionare le cose correttamente?Non sono proprio sicuro di cosa stia succedendo.So solo che questo accade soprattutto se sto eseguendo molto client.send() molto molto velocemente, come se venisse memorizzato nel buffer e quindi inviasse la dimensione del buffer, quindi taglia il pacchetto in pochi non leggibili per il client (perché ovviamente non se lo aspetta).Sono davvero bloccato con questo :(

PS:Il server è scritto in Python con un solito socket TCP simile a un tutorial e thread client.

Nessuna soluzione corretta

Altri suggerimenti

Se stai usando AMF, non capisco perché dovresti leggere byte da un array binario?

Prova a utilizzare RemoteObject e un gestore di risposte (ed eventualmente anche un gestore di errori)

C'è un esempio qui: http://pyamf.org/tutorials/actionscript/simple.html#actionscript(che non ho provato perché non sono esperto di Python)

Oltre a questo, ricorda che i comandi sono fuoco e dimentica.La maggior parte dei problemi riscontrati nella gestione del traffico lato server in Flex è causata dalla mancata registrazione dei listener di eventi, ecc.pr.chiamata al server.

Spero che sia d'aiuto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top