Проверка работоспособности - Является ли жизнеспособным многопользовательский игровой сервер на Java с использованием TCP (ServerSocket)? - PullRequest
2 голосов
/ 05 марта 2010

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

Я никогда раньше не писал код сервера.

У меня есть опыт работы с Java, и использование Sockets кажется мне самым простым вариантом. Браузерная игра будет означать независимость от платформы, но я не знаю, как обойти отсутствие подталкивания с использованием Http с сервера на браузер.

Вот так должна получиться игра, она должна дать представление о том, что мне нужно;

Пользователь запускает приложение, и оно подключается через сокет к моему серверу. Сервер ждет 4 игроков, группирует их в игру, а затем транслирует первый вопрос для викторины. После того, как все игроки представили свои ответы (или прошло 5 секунд), Сервер распределяет правильный ответ со следующим вопросом.

Это основы, вы, вероятно, можете заполнить более мелкие детали, на самом деле это просто игрушечный проект.

МОЙ ВОПРОС ЕСТЬ;

Каковы ловушки использования простого JAR на сервере для обработки клиентских запросов? Код сервера регистрирует ServerSocket при первом запуске и создает пул потоков для обработки входящих клиентских подключений. Есть ли вариант, который по своей сути лучше для подключения к нескольким клиентам в режиме реального времени с двухсторонней связью?

Простой пример приведен в SUN tutorials , внизу которого вы можете увидеть исходный код многопоточного сервера, за исключением того, что у меня изначально есть пул потоков, чтобы уменьшить нагрузку, мой сервер в основном такой же.

Сколько клиентов вы ожидаете, что эта система сможет обрабатывать? Если у нас есть новый поток для каждого клиента, я вижу, что это ограничение, а также количество бесплатных сокетов для одновременных игроков. Потоки, кажется, достигают максимума около 6500 , а количество доступных сокетов почти в десять раз больше.

Если честно, если бы моя игра могла обрабатывать 20 одновременных игроков, это было бы хорошо, но я пытаюсь понять, насколько глуп этот подход по своей сути. Любые статьи о настройке простого шахматного сервера или чего-то еще были бы удивительными, я просто не могу их найти.

Заранее спасибо, знающие,

Гав

Ответы [ 3 ]

2 голосов
/ 06 марта 2010

Вы можете нормально обрабатывать 20 одновременно работающих игроков на сервере Java. Самое главное, чтобы убедиться, что вы делаете, это избегать любого вида блокировки пользовательского интерфейса, как будто это был сам дьявол.

В качестве бонуса, если вы придерживаетесь неблокирующего ввода-вывода, вы, вероятно, можете сделать все это однопоточным.

При масштабировании более 100 пользователей или около того может потребоваться доступ к нескольким процессам / серверам, в зависимости от того, какую нагрузку каждый пользователь помещает на ваш клиент.

1 голос
/ 05 марта 2010

Это должно быть в состоянии сделать это без проблем, если вы правильно его кодируете.

Project Darkstar

0 голосов
/ 06 марта 2010

Вы можете обойти проблему «перенаправить с сервера на клиент по HTTP», используя метод Long Poll .

Однако, использование TCP-сокетов для этого тоже подойдет. Так написано множество игр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...