Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Работа с сетью > По какому принципу строятся многопоточные серверы? |
Автор: acinonyx 25.3.2009, 23:08 |
Как строятся сервера для многиг клиентов? Насколько я понимаю протокол TCP-IP позволяет подключить на один порт только одного клиента. Соединение нужно поддерживать, по етому насколько я понимаю DatagramSocket не подходит. Я сделал так: клиент подключается к ServerSocket-y по некоторому порту, после чего создается новый ServerSocket (с новым портом), а клиенту передается новий порт на который он должен переподключиться для дальнейшей роботы. Таким образом каждый клиент коннектится на один и тот же порт но дальше работа идет у каждого со своим. Такой вариант мне подходит, но все же ето по-моему как-то плохо, каждому клиенту выделять отдельный порт... интересно как же тогда работают, к примеру, игровые сервера с которыми постоянно соединены тисячи клиентов? неужели они выделяют каждому свой порт? Интересует подход вобще, и в Java вчастности. |
Автор: jManiak 26.3.2009, 14:31 |
http://forum.sources.ru/index.php?showtopic=217611 когда-то создавал подобную тему. А если в общем, то я делал так: клиент конектится. Создается новый Socket для него, в отдельном потоке, в этом сокете находятся как ип и порт отправителя так и получателя. через этот Сокет уже и работаете с клиентом. А ServerSocket создается один. |
Автор: idti 26.3.2009, 21:47 |
Клиенты могут подключаться на один порт по умолчанию до 50 клиентов. Это я про java. Прочитать про это можно например у Шилда, полный справочник по java 6.0. Чтобы реализовать это нужно создать СокетСервер и асептить клиентов, каждый такой клиент создает уже рабочий Сокет. |
Автор: acinonyx 30.3.2009, 02:23 |
Спасибо |
Автор: nucer 29.4.2009, 23:21 | ||||
ServerSocket - это открытый сервером на прослушку порт т.е. туда конектятся клиенты, с ним ничего делать не надо, он один. Дальше каждому клиентскому конекту присваивается Socket - для каждого клиента свой, на отдельном порту. винда позволяет открыть до 65535 портов в идеале насколько я знаю.
Проблема может возникнуть только если это соединения не постоянные, а как в web-сервере - один запрос = один конект, тогда может возникнуть ситуация что портов у системы не хватит и надо заводить какую то очередь, это уже сложно! ) Но с игровыми серверами, которые держат постоянный коннект с клиентом такой проблемы не возникнет 99.9% |
Автор: COVD 30.4.2009, 00:01 | ||
А вы не ошиблись? Не могли бы цитату или ссылку привести. Про ограничение в 50 клиентов. |
Автор: Vurn 3.5.2009, 17:32 | ||||
Он перепутал. Не количество коннектов 50, а допустимая очередь входящих необработанных коннектов для конструктора по умолчанию 50 входящих. Код из ServerSocket.java:
|