![]() |
Socket и EventDispatcher
Всем привет!
Разбираюсь с As3 - сделал простенькое c-s приложение чат на сокетах. Проблема в том что при большом колоичестве пакетов с севера - данные на стороне флеша пропадают! Код AS1/AS2:
ОС Windows7, Cs4, Flash 10. Кто нибудь сталкивался с чем то похожим? Почему сокет не диспатчит некоторые данные??? PS: Сейчас посмотрел сниффером - все пакеты реально приходят, а флеш их не видит!!! |
значит, это не UTFBytes
|
Скорее всего строка обрывается по нулевому байту.
|
это UTF-8 кодировка с сервера именно в этой кодировке я все и передаю!
В конце каждой строки \0! тоесть логика работы - нашел нулевой байт, сегенерировал событие и передал в него сколько байт считал (event.bytesLoaded)? Теперь приходит сразу же еще один пакет но получается пока из буффера я не вытащу старое новое он не видит? Ничегоне понимаю, кто мне объяснит доходчиво???? Heeeeelp!!! PS: Еще заметил такую вещь что большой пакет при приеме может разбиться на 2! и возникает исключение. Может тут где-то в сокете буфера на прием надо задавать какой? В доках по flash.net.socket ничего такого не нашел PPS: Что удалось узнать дополнительно. Если в отсылку сообщений вставить задержку - минимум 400 мс то все приходит нормально. Каждый пакет приходит в своем сетевом фрейме и Флеш его видит, если же задержку убрать то сообщение вот такого типа ( три пакета в сетевом кадре) уже не разреливаются Код:
0000 00 22 15 da 10 4a 00 0c 6e 8a 2b 3a 08 00 45 00 ."...J.. n.+:..E.Пробовал ставить TCP_NODELAY ( без ACK ) - немного лучше ( раза в 2 меньше теряется пакетов ) |
Цитата:
Код AS3:
|
Хороший примерчик! Спасибою. Я даже и не думал что все так сложно во флеше.
Код AS3:
dimarik, не могли бы вы посоветовать как лучше делать в таком случае? Полученное сообщение разбирать побайтово и выделять из него пакеты ( соединять если они разбиты ) -ища постоянно \0 или попытаться реализовать на сервере отправку одного пакета в одном кадре? |
Вы не поверите! Но я предложу исключить байт \0
|
ммм...
тогда я не понимаю, как я буду разбирать приходящую информацию... надо придумывать какой то формат и тп... а сейчас у меня все просто - сериализованные объекты в качестве разделителя \0. ладно, буду хватать по байтам и искать \0. Другого варианта абсолютно не вижу ((( |
кодируйте base64 (если возможно конечно). размер пакета вырастет на ~30%, зато стопроцентное исключение 0 байта. к тому же base64 хорошо жмется
|
Цитата:
Но я думаю для простенького прожекта для пакетов вообще без сжатия, это перебор. Но спасибо. =) |
| Часовой пояс GMT +4, время: 05:16. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.