Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопоточное взаимодействие в лобби-чат сервере, 1000 потоков-сокетов/клиентов и 1 ресурс 
:(
    Опции темы
Tipon
  Дата 4.4.2010, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 18.2.2010

Репутация: нет
Всего: нет



Недавно начал изучать Яву. До этого было не много простых Pascal / ActionScript / JavaScript  -программ.

Написал по книжке многопоточный Эхо-сервер (каждый клиент - отдельный сокет получает в ответ свое же сообщение с добавкой "Эхо" ) - вроде разобрался.

Задача:  написать программу Лобби-сервер с функцией чата для конкретной онлайн игры.

Проблема:(в  синхронизации) предсказуемой последовательности обращения потоков на чтение\запись в массив.

Описание: 
Известный мне метод synchronized не совсем подходит, т.к. после разблокировки объекта блокировку перехватывает рандомный в очереди поток, что иногда приводит к устареванию данных и уже неактуальности их отправки клиенту. Читал не много и про другие методы синхронизации, мне показались они неоправданно сложны и не совсем понятно какой вообще метод разделения доступа лучше всего использовать, чтобы и производительность была на высоком уровне и и код был более-менее красивым и простом в решении этой проблемы.



PM MAIL   Вверх
Sleepy_PIP
Дата 4.4.2010, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: 4
Всего: 12



1000 потоков. это критика. в смысле это не правильно. сокетов может быть хоть лимон хотя Вам столько ОС не даст smile но все равно моежт быть более 1000. но потоков более 1000 на 1 задачу держать все равно очень плохо. во всех ОС кроме майнфреймов. но там даже не потоки. сорри если помешал ... 
не дело вешать по потоку на каждый сокет при Ваших условиях .... поток на запрос - пожалуста - чем-бы запрос не являлся и пул сокетов для вашего случая ... про синхронизацию - есть несколько методов , не только synchronise метода.
Вам надо что - что-б данные не устарели для конкретного соединения или для любого?. для конкретного - очереди. для любого - сорри - это скорее даже просто к каналу и серверу ... 
как быстрее - общяя очедедь сообщений, подписчики на сообщения. пул коннектов, пул потоков. все ИМХО ...

Это сообщение отредактировал(а) Sleepy_PIP - 4.4.2010, 20:16


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
Tipon
Дата 4.4.2010, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 18.2.2010

Репутация: нет
Всего: нет



1000 это скорее образно говоря, я зря ляпнул это в описании. На практике скорее всего 300-600 клиентов онлайн, которым надо принять и передать все изменения в лобби-таблице и в чате для каждого. 

Не суть важно с какой задержкой, главное чтобы все произошедшие на сервере изменения дошли до конечного клиента в такой же очередности. То, что можно не использовать для каждого сокет-соединения свой поток - это для меня новое(спасибо). Но конечно, пока для меня все это очень смутно и не до конца понятно. Я понимаю что все надо организовать через очереди запросов-действий, но как это реализовать пока не ясно.

Спасибо и на том, что уже открыли для меня, но, извиняюсь если наглею, если есть какие-то более конкретные ссылки, примеры, то я буду вообще безмерно счастлив.
PM MAIL   Вверх
jk1
Дата 4.4.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Есть открытая реализация похожей задачи
http://www.dwgold.com/Projects/Networking/...er/Default.aspx
почитайте исходники, их не много, может быть вдохновит.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3262 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.