Flex Networking: Как прочитать несколько объектов AMF
-
26-09-2019 - |
Вопрос
Я пытаюсь написать очень простой игровой клиент, чтобы получить некоторую практику с помощью 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. Серверный звонок.
Надеюсь, поможет