![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Tipon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 18.2.2010 Репутация: нет Всего: нет |
Недавно начал изучать Яву. До этого было не много простых Pascal / ActionScript / JavaScript -программ.
Написал по книжке многопоточный Эхо-сервер (каждый клиент - отдельный сокет получает в ответ свое же сообщение с добавкой "Эхо" ) - вроде разобрался. Задача: написать программу Лобби-сервер с функцией чата для конкретной онлайн игры. Проблема:(в синхронизации) предсказуемой последовательности обращения потоков на чтение\запись в массив. Описание: Известный мне метод synchronized не совсем подходит, т.к. после разблокировки объекта блокировку перехватывает рандомный в очереди поток, что иногда приводит к устареванию данных и уже неактуальности их отправки клиенту. Читал не много и про другие методы синхронизации, мне показались они неоправданно сложны и не совсем понятно какой вообще метод разделения доступа лучше всего использовать, чтобы и производительность была на высоком уровне и и код был более-менее красивым и простом в решении этой проблемы. |
|||
|
||||
| Sleepy_PIP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
1000 потоков. это критика. в смысле это не правильно. сокетов может быть хоть лимон хотя Вам столько ОС не даст
не дело вешать по потоку на каждый сокет при Ваших условиях .... поток на запрос - пожалуста - чем-бы запрос не являлся и пул сокетов для вашего случая ... про синхронизацию - есть несколько методов , не только synchronise метода. Вам надо что - что-б данные не устарели для конкретного соединения или для любого?. для конкретного - очереди. для любого - сорри - это скорее даже просто к каналу и серверу ... как быстрее - общяя очедедь сообщений, подписчики на сообщения. пул коннектов, пул потоков. все ИМХО ... Это сообщение отредактировал(а) Sleepy_PIP - 4.4.2010, 20:16 -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
|||
|
||||
| Tipon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 18.2.2010 Репутация: нет Всего: нет |
1000 это скорее образно говоря, я зря ляпнул это в описании. На практике скорее всего 300-600 клиентов онлайн, которым надо принять и передать все изменения в лобби-таблице и в чате для каждого.
Не суть важно с какой задержкой, главное чтобы все произошедшие на сервере изменения дошли до конечного клиента в такой же очередности. То, что можно не использовать для каждого сокет-соединения свой поток - это для меня новое(спасибо). Но конечно, пока для меня все это очень смутно и не до конца понятно. Я понимаю что все надо организовать через очереди запросов-действий, но как это реализовать пока не ясно. Спасибо и на том, что уже открыли для меня, но, извиняюсь если наглею, если есть какие-то более конкретные ссылки, примеры, то я буду вообще безмерно счастлив. |
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Есть открытая реализация похожей задачи
http://www.dwgold.com/Projects/Networking/...er/Default.aspx почитайте исходники, их не много, может быть вдохновит. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |