Я делаю многопользовательскую игру. Теперь я пытаюсь выбрать технологию подключения устройств Android к серверу. Клиенты работают на Android, а игра MMORPG. Я хотел бы написать сервер в java. Прямо сейчас у меня есть только 3 идеи:Java-сервер с высокой нагрузкой
1) создание многопоточной среды с простой java и сокетами. Таким образом будет проще выполнять полнодуплексное соединение между игровым клиентом и сервером. Но у меня есть следующие проблемы:
1,1) Игра MMORPG с большим количеством объектов, и я не знаю, как такие решения масштабируются, если есть, например, 5000 людей, играющие одновременно. Сколько потоков я смогу запустить на java Machine? Как я могу рассчитать это? В случае, если 1 нить считывается для каждого сокета и 1 поток записывает в сокет (так что 2 потока для 1 игрока).
1.2) Когда количество игроков растет, как я смогу масштабировать свой самонаписанный jar-архив для распространения по нескольким серверам? Может быть, есть какой-то особый трюк?
1.3). Много программирования накладных разъемов API довольно низкого уровня.
2) Создание сервлет-интерфейса для обслуживания HTTP-запросов.
2.1) Легко контролировать сеансы (и авторизацию), пока у каждого игрока есть своя сессия.
2.2) может подключаться к java EE EJB или что угодно - много осложнений с системным программированием отбираются. Поэтому я могу сосредоточиться на написании бизнес-логики.
2.3) Может обслуживать всех типов клиентов с помощью HTTP-мобильных устройств + браузеров.
2.4) Высокоскоростной - даже один контейнер сервлетов может обслуживать несколько тысяч запросов в секунду, поэтому он будет очень быстрым.
2.4) Но этот подход не может обеспечить полнодуплексное сообщение. Мне нужно будет отправлять запросы каждые 1 секунду, чтобы проверить наличие обновлений. Задержка в 1 секунду не имеет большого значения для игры, поскольку она основана на пошаговом режиме, но при этом она генерирует много трафика. Возможно ли, когда много игроков играют? Я слышал о какой-то технологии COMET, но похоже, что если серверу нужно много сообщений в строке, мне все равно придется отправлять запросы каждый раз, пока эта технология еще не установлена.
3) Создание сокетов и подключение их через JMS к серверу Java EE.
3.1) Прохладный, поскольку позволяет полностью дуплексную связь между клиентами и сервером + предоставляет все интересные функции java EE. Позже можно расширить браузер через интерфейс сервлета.
3.2) Кажется, что-то перерабатывает. Неужели это так люди? Я имею в виду, это даже правильный путь? Может ли любой здравомыслящий разработчик сделать это?
Я хотел бы, чтобы вы помогли мне с выбором, пожалуйста. У меня нет большого опыта работы с такой работой. И хотелось бы придерживаться лучших практик.
Вы должны прочитать [Эта статья о проблеме C10K] (http://www.kegel.com/c10k. HTML). Существует множество советов и хороших правил для создания масштабируемого сетевого приложения. – nouney
2.4: Вы должны взглянуть на структуру кометы, она позволяет полнодуплексные сервлеты ... Theres хорошая статья об этом в IBM http://www.ibm.com/developerworks/web/library/wa-cometjava/ – David