PDA

Просмотр полной версии : Flash +java + Socket Проблема с приёмом данных.


Боня
19.12.2010, 22:31
Проблема простая, но в то же время как решить не знаю. уже несколько дней пытаюсь решить, но никак.
Суть проблемы:
Flash подключается постоянно без проблем. С файлом политики тоже всё отлично.
Я открываю флэшку на одном компе два раза. Создавая илюзию двух клиентов в чате. Каждый из клиентов получает свой порт:
192.168.0.128:2842
192.168.0.128:2843

Проблема в том, что Java(сервер) отсылает около 4-ёх сообщений клиенту. Каждые разделяя "\u0000" прерывания. Так вот к первому клиенту все доходят, а ко второму только первые 2. К третьему первые 3. К четвёртому опять все доходят. Логики и закономерности невижу.

У кого-нибуть были подобные проблемки?

Добавлено через 4 минуты
Пробовал в java писать sleep(15). Т.е. после отправки каждого сообщения, сервер ждал 15 мл прежде чем отправить следующее сообщение тому же клиенту.
Сделал цикл с отправкой 50 сообщений подряд. Всё заработало. Но вот когда сообщения опять пошли в разброс и не подряд, флэшка опять переодически не перехватывает сообщения.

membrilius
19.12.2010, 23:06
а в каком режиме работает сокет, блокирующей или нет?

Боня
19.12.2010, 23:19
Уходил, поэтому не мог сразу ответить.
Вообще я забыл упомянуть, что я использую "xmlsocket://".
а в каком режиме работает сокет, блокирующей или нет?

Насколько я знаю:
Работа неблокирующих сокетов основана на системных событиях. И т.к. во флэше используются методы:
socket.addEventListener(Event.CONNECT, socketConnect);//Подключились к серверу.
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketData);//Получили сообщение от сервера.
То полагаю режим неблокирующий. могу в даных познаниях ошибаться. если, что подскажите, я попробую ответить. А что касательно java то как я ранее упомянул с ним проблем нет, принимает и передаёт.

java работает:
while (line != null)
{}//где line - сообщение принятое от флэш. Как только прирывается, значит клиент вышел.
//Может эта часть составлена безграмотно. Учился по статьям в интернете.
Как я понимаю даже когда я не отправляю в чате никаких сообщений серверу. Флэшка сама отпраляет ему постоянно логическую 1. Дабы показать, что соединение не прервано. Может как-то подобное можно улучшить?.

Добавлено через 14 минут
Уточнил в гугле про блокирующий режим:
Т.е. на момент приёма данных, работа программы приостанавливается.
Ух. Ну я полагаю, что у меня режим не блокирующий. Да и право как сделать блокирующий режим не знаю.

Добавлено через 33 минуты
А может и правда, можно как-то поставить приоритет. Что бы в случае приёма данных, прерывал работу программы. Если поступает около 40 - 100 байт прирывание для человека будет вообще незаметным. только как данное можно осуществить.
Может есть стандартные функции растановки приаритетов?

Добавлено через 42 минуты
Поставил в java задержку 50 мл, после отправки каждого сообщения. Т.е. после того как отправил, перед тем как отправить следующие сервер выжидает 50 мл(sleep(50)). Работает. Но задержка не есть хорошо. А если одновременно придёт 30 сообщений. То последниму придётся долго ждать.
кто-нибуть знает как такое исправить?