![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
acinonyx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 14.4.2008 Репутация: нет Всего: нет |
Как строятся сервера для многиг клиентов?
Насколько я понимаю протокол TCP-IP позволяет подключить на один порт только одного клиента. Соединение нужно поддерживать, по етому насколько я понимаю DatagramSocket не подходит. Я сделал так: клиент подключается к ServerSocket-y по некоторому порту, после чего создается новый ServerSocket (с новым портом), а клиенту передается новий порт на который он должен переподключиться для дальнейшей роботы. Таким образом каждый клиент коннектится на один и тот же порт но дальше работа идет у каждого со своим. Такой вариант мне подходит, но все же ето по-моему как-то плохо, каждому клиенту выделять отдельный порт... интересно как же тогда работают, к примеру, игровые сервера с которыми постоянно соединены тисячи клиентов? неужели они выделяют каждому свой порт? Интересует подход вобще, и в Java вчастности. |
|||
|
||||
jManiak |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 6.2.2007 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Вот когда-то создавал подобную тему.
А если в общем, то я делал так: клиент конектится. Создается новый Socket для него, в отдельном потоке, в этом сокете находятся как ип и порт отправителя так и получателя. через этот Сокет уже и работаете с клиентом. А ServerSocket создается один. |
|||
|
||||
idti |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 28.2.2009 Где: pnz Репутация: нет Всего: нет |
Клиенты могут подключаться на один порт по умолчанию до 50 клиентов. Это я про java. Прочитать про это можно например у Шилда, полный справочник по java 6.0. Чтобы реализовать это нужно создать СокетСервер и асептить клиентов, каждый такой клиент создает уже рабочий Сокет.
|
|||
|
||||
acinonyx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 14.4.2008 Репутация: нет Всего: нет |
Спасибо
|
|||
|
||||
nucer |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 21.6.2004 Где: Москва Репутация: нет Всего: 0 |
ServerSocket - это открытый сервером на прослушку порт т.е. туда конектятся клиенты, с ним ничего делать не надо, он один. Дальше каждому клиентскому конекту присваивается Socket - для каждого клиента свой, на отдельном порту. винда позволяет открыть до 65535 портов в идеале насколько я знаю.
Проблема может возникнуть только если это соединения не постоянные, а как в web-сервере - один запрос = один конект, тогда может возникнуть ситуация что портов у системы не хватит и надо заводить какую то очередь, это уже сложно! ) Но с игровыми серверами, которые держат постоянный коннект с клиентом такой проблемы не возникнет 99.9% |
||||
|
|||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
А вы не ошиблись? Не могли бы цитату или ссылку привести. Про ограничение в 50 клиентов. |
|||
|
||||
Vurn |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 24.5.2007 Репутация: 1 Всего: 3 |
Он перепутал. Не количество коннектов 50, а допустимая очередь входящих необработанных коннектов для конструктора по умолчанию 50 входящих. Код из ServerSocket.java:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |