|
|
|
ConnectionPool для User-ов
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! В нашем проекте (клиент-сервер, сокеты) при подключении каждого клиента (коннект с пользователем должен деражаться постоянно) создавался отдельный поток для чтения из сокета. Данный подход неплохо работает на сравнительно небольшом количестве пользователей (где-то до 50). Дальше - "спецэффекты" типа замедления "отклика" сервера при нагрузке. Поискал по форуму, нашел вот тут: /topic/248242#2210032 Там есть предложение использовать всего два потока на всех клиентов - один читает, другой пишет. Есть ли где-нибудь более подробное описание такой схемы? Я вот тут сделал вариант, как я это вижу. Насколько он корректен? Тест для проверки всего: Код: plaintext Клиент: Код: plaintext Сервер: Код: plaintext При любом случае нагрузка получается где-то 70-90% процессорного времени (процесс java.exe в Task manager-е). По профайлеру тоже вроде как все нормально... Меня больше всего волнует то, что ReadingThread и SendingThread используют ВСЕ время системы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 14:01 |
|
||
|
ConnectionPool для User-ов
|
|||
|---|---|---|---|
|
#18+
А пул потоков не подходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 14:47 |
|
||
|
ConnectionPool для User-ов
|
|||
|---|---|---|---|
|
#18+
А что он реально даст? Когда клиенты исчисляются сотнями или даже тысячами, то это ж все равно будет тысячи потоков... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 14:48 |
|
||
|
ConnectionPool для User-ов
|
|||
|---|---|---|---|
|
#18+
tserega Данный подход неплохо работает на сравнительно небольшом количестве пользователей (где-то до 50) А ты не пробовал менять размер стека у серверного сокета: Код: plaintext 1. - по умолчанию он как раз 50 и твои соединения съели весь стек, увеличь его! ну и конечно подумай получше об архитектуре приложения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 15:29 |
|
||
|
ConnectionPool для User-ов
|
|||
|---|---|---|---|
|
#18+
Kachalov tserega Данный подход неплохо работает на сравнительно небольшом количестве пользователей (где-то до 50) А ты не пробовал менять размер стека у серверного сокета: Код: plaintext 1. - по умолчанию он как раз 50 и твои соединения съели весь стек, увеличь его! Но ведь это же не решает проблему кучи потоков... Kachalov ну и конечно подумай получше об архитектуре приложения Вот и думаем над этим... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 16:12 |
|
||
|
ConnectionPool для User-ов
|
|||
|---|---|---|---|
|
#18+
авторА что он реально даст? Когда клиенты исчисляются сотнями или даже тысячами, то это ж все равно будет тысячи потоков.. Ты ляжешь, если будешь создавать на каждого юзверя поток. Обмен данными идет непрерывно? Если нет, то пул event-driven потоков твое спасение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 17:29 |
|
||
|
ConnectionPool для User-ов
|
|||
|---|---|---|---|
|
#18+
интересно зачем ТЫСЯЧАМ клиентов постоянное соединение? игру чтоли пишите сетевую? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 17:36 |
|
||
|
ConnectionPool для User-ов
|
|||
|---|---|---|---|
|
#18+
SatracОбмен данными идет непрерывно? Да, непрерывно. vfabrинтересно зачем ТЫСЯЧАМ клиентов постоянное соединение? игру чтоли пишите сетевую? Ну... это не так далеко от истины... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 09:52 |
|
||
|
ConnectionPool для User-ов
|
|||
|---|---|---|---|
|
#18+
IMHO В сетевой игре не обязательно держать соединение постоянно. Ну может его и желательно держать, но только в некоторых случаях, например, когда идет бой, а когда игрок перемещается то можно и без него. Во всяком случае игровые серваки (в которых держится постоянное соединение если такие есть) это должны быть здоровые кластера которые между собой делят нагрузку, я так думаю 200-300 игроков на сервер. Соответственно 10-20 серваков. Кстати например TimeZero одновременно играющих больше 3.5 тыс я ниразу не видел (естессно у них никакой коннект не держится). А если будет всего 2 потока на ТЫСЯЧИ одновременных клиентов то посчитайте сколько времени будет максимальная задержка для игрока который попал в очередь последним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 10:36 |
|
||
|
ConnectionPool для User-ов
|
|||
|---|---|---|---|
|
#18+
Смотри в сторону NIO и SocketChannel ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 10:40 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=702&tid=2148270]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 371ms |

| 0 / 0 |
