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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> По какому принципу строятся многопоточные серверы? теоретический вопрос 
V
    Опции темы
acinonyx
Дата 25.3.2009, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как строятся сервера для многиг клиентов?
Насколько я понимаю протокол TCP-IP позволяет подключить на один порт только одного клиента.
Соединение нужно поддерживать, по етому насколько я понимаю DatagramSocket не подходит.

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

Такой вариант мне подходит, но все же ето по-моему как-то плохо, каждому клиенту выделять отдельный порт... 
интересно как же тогда работают, к примеру, игровые сервера с которыми постоянно соединены тисячи клиентов? неужели они выделяют каждому свой порт?

Интересует подход вобще, и в Java вчастности.

PM MAIL   Вверх
jManiak
Дата 26.3.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот когда-то создавал подобную тему.

А если в общем, то я делал так: клиент конектится. Создается новый Socket для него, в отдельном потоке, в этом сокете находятся как ип и порт отправителя так и получателя. через этот Сокет уже и работаете с клиентом. А ServerSocket создается один.
PM MAIL ICQ   Вверх
idti
Дата 26.3.2009, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Клиенты могут подключаться на один порт по умолчанию до 50 клиентов. Это я про java. Прочитать про это можно например у Шилда, полный справочник по java 6.0. Чтобы реализовать это нужно создать СокетСервер и асептить клиентов, каждый такой клиент создает уже рабочий Сокет.

PM MAIL   Вверх
acinonyx
Дата 30.3.2009, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо
PM MAIL   Вверх
nucer
Дата 29.4.2009, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

ServerSocket - это открытый сервером на прослушку порт т.е. туда конектятся клиенты, с ним ничего делать не надо, он один. Дальше каждому клиентскому конекту присваивается Socket - для каждого клиента свой, на отдельном порту. винда позволяет открыть до 65535 портов в идеале насколько я знаю.

Цитата
интересно как же тогда работают, к примеру, игровые сервера с которыми постоянно соединены тисячи клиентов? неужели они выделяют каждому свой порт?

Интересует подход вобще, и в Java вчастности.
копался в l2j некоторое время назад - именно так все и реализовано, по-другому и не сделать вроде )
Проблема может возникнуть только если это соединения не постоянные, а как в web-сервере - один запрос = один конект, тогда может возникнуть ситуация что портов у системы не хватит и надо заводить какую то очередь, это уже сложно! ) Но с игровыми серверами, которые держат постоянный коннект с клиентом такой проблемы не возникнет 99.9%
PM MAIL   Вверх
COVD
Дата 30.4.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

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



Цитата

Клиенты могут подключаться на один порт по умолчанию до 50 клиентов. Это я про java. Прочитать про это можно например у Шилда, полный справочник по java 6.0.

А вы не ошиблись? Не могли бы цитату или ссылку привести. Про ограничение в 50 клиентов. 
PM MAIL   Вверх
Vurn
Дата 3.5.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(COVD @ 30.4.2009,  00:01)
А вы не ошиблись? Не могли бы цитату или ссылку привести. Про ограничение в 50 клиентов.

Он перепутал. Не количество коннектов 50, а допустимая очередь входящих необработанных коннектов для конструктора по умолчанию 50 входящих.
Код из ServerSocket.java:
Код

    public ServerSocket(int port) throws IOException {
    this(port, 50, null);
    }



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

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

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


 




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


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

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