Вопрос

Я пытаюсь написать очень простой игровой клиент, чтобы получить некоторую практику с помощью ActionScript 3 и Flex Framework.

У меня есть некоторые проблемы со следующим кодом:

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

Кажется, хорошо работает у клиента большую часть времени, но иногда я получил странное поведение, которое не должно происходить. Если я посмотрю в консоли, есть много «отклоненных» пакетов. Как только я вошел в систему отброшенного остатка пакета, это очень похоже на сломанный, невыполненный пакет. Он начинается в середине строки, например, это часто происходит, если данные быстро отправляются с сервера. На сервере каждый из пакетов отправляет, вызывая связанную функцию Client.Send ().

Это неправильный способ попробовать обработать более одного входящего объекта? Может ли это быть проблемой серверов, вызывая отправку пакетов безформированных / неполных?

Я был бы очень счастлив, если кто-то может помочь мне.

Небольшое обновление, может быть, это помогает: я зарегистрировал длину отправки данных по сети. Зарегистрированные выглядят так (сервер | клиент):
208 | 208
92 | 92
208 |. 208 214 |. 214 и ой, пакет уволен? Рестораны :: 212.
148 |. r.bytesavailable: 388.
27 |. 388 и ой, пакет уволен? Рестораны :: 384 и т. Д. ...

Это похоже на то, что сервер разрывает данные, и клиент сочетается с этим. Что я могу опубликовать больше, чтобы получить помощь с этой проблемой? Должен ли я промывать данные по маркуровке на сервере Python, чтобы добраться до работы, верно? Я не совсем уверен, что происходит. Я просто знаю, что это происходит в основном, если я Doig много клиента. Очень очень быстро, как буфет, а затем отправьте размер буфера, поэтому он вырезает пакет в несколько не читаемых для клиент (потому что, очевидно, это не ожидает этого). Я действительно застрял с этим :(

PS: сервер написан на Python с обычным учебным подобным разъемом TCP и клиентские потоки.

Нет правильного решения

Другие советы

Если вы используете AMF, я не понимаю, почему вы прочитали BYTES из бинарного массива?

Попробуйте использовать RemoteObject и обратную обработчик (и в конечном итоге и обработчик ошибок)

Здесь есть пример: http://pyamf.org/tutorials/4Script/simple.html#actactionscript(который я не пробовал, как я не питован)

Кроме того, помните, что команды стреляют и забывают. Основная часть вопросов, встречающихся в борьбе с трафиком Server Side, в Flex, вызвана не регистрируя слушателей событий и т. Д. Pr. Серверный звонок.

Надеюсь, поможет

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top