Многопользовательская игра клиент / сервер с архитектурой RMI / JMS / Sockets - PullRequest
3 голосов
/ 20 ноября 2010

Я нахожусь в процессе написания пошаговой карточной игры на Java, но мне нужно несколько советов, как сделать ее многопользовательской. Игроки могут создать многопользовательскую игру, а затем другие могут присоединиться к этой игре, по очереди играя свой ход. Я часами изучал различные способы реализации этого, но мог бы действительно помочь. Я перечислю требования и то, что я до сих пор узнал:

  • Это полностью Java-игра, поэтому использование чего-то вроде RMI не является проблемой по этой причине
  • Игрок делает ход, этот ход отправляется на сервер, сервер отправляет этот ход другим игрокам (клиентам) в игре.
  • Сервер должен хранить все игры в процессе и игроков в них (в настоящее время это делается с HashMap<UniqueGameID, GameObject>.

Я до сих пор экспериментировал с сокетами и RMI, и кажется:

RMI

+ Обрабатывает многопоточность и доступ к хэш-карте

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

Гнезда

+ Допускает асинхронные обратные вызовы (?)

- Не удается легко получить доступ к hashmap из нескольких потоков, которые создаются (?)

- Сложнее, чем RMI

Я также изучал JMS, JINI / JavaSpaces, JGroups и все остальное, что я могу найти, но я понятия не имею, какой из них будет работать лучше всего. У меня есть клиентская> серверная часть RMI, но сервер-> клиент кажется невозможным, так как опрос настолько неэффективен и не масштабируется

Буду очень признателен за любые ваши советы.

Большое спасибо

РЕДАКТИРОВАТЬ: С тех пор я обнаружил ConcurrentHashMap, который, я думаю, решает одну из моих проблем.

Ответы [ 3 ]

2 голосов
/ 22 ноября 2010

Взгляните на ZeroMQ . Он абстрагирует большую часть накладных расходов, которые вы бы имели с сокетами, а также позволяет синхронизировать асинхронные сообщения. Думайте об этом как о посреднике между RMI и сокетами.

1 голос
/ 20 ноября 2010

Создатели Second Life опубликовали результаты своего обсуждения инфраструктуры сообщений в Интернете, которое содержит список решений для обмена сообщениями с комментариями об их плюсах и минусах:

Замечания по оценке очереди сообщений (Second Life Wiki)

0 голосов
/ 20 ноября 2010

Рассматривали ли вы Hazelcast ?Это поддерживает распределенные коллекции и другие структуры данных.Для игры я уверен, что она достаточно надежна.

■ Распределенный java.util. {Очередь, Набор, Список, Карта} ■ Распределенный java.util.concurrency.locks.Lock ■ Распределенный java.util.concurrent.ExecutorService

■ Распределенная MultiMap для сопоставления один ко многим ■ Распределенная тема для обмена сообщениями публикации / подписки ■ Поддержка распределенного индексирования и запросов ■ Поддержка транзакций и интеграция контейнеров J2EE через JCA

■ Шифрование на уровне сокетов для безопасногоКластеры ■ Постоянная запись и постоянная запись для карт ■ Клиент Java для удаленного доступа к кластеру ■ Динамическая кластеризация сеанса HTTP

■ Поддержка информации о кластере и событиях членства ■ Динамическое обнаружение ■ Динамическое масштабирование ■ Динамическое разбиение с резервными копиями■ Динамическое переключение при сбое ■ Сетевой инструмент мониторинга кластера

...