2010-11-20 2 views
3

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

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

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

RMI:

+ Ручки многопоточность и доступ к HashMap

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

Sockets: (?)

+ Позволяет для асинхронных обратных вызовов

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

- более сложным, чем RMI

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

Я очень благодарен за любые ваши советы.

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

EDIT: С тех пор я обнаружил ConcurrentHashMap, который я думаю, решает одну из моих проблем.

ответ

1

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

Message Queue Evaluation Notes (Second Life Wiki)

+0

Большое спасибо, это хорошо читать – Marc

0

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

■ Распределенная java.util. {Очереди, Set, List, Map} ■ Распределенная java.util.concurrency.locks.Lock ■ Распределенная java.util.concurrent.ExecutorService

■ Распределенная Multimap для одного ко многим отображения ■ Distributed тема для публикации/подписки сообщениями ■ Распределенная индексирование и запрос поддержки ■ Транзакция поддержка и контейнер J2EE интеграции с помощью JCA

■ Разъем уровень шифрования для безопасных кластеров ■ Write-Through и Write-Behind упорства для карт ■ Клиент Java для доступа к кластеру удаленно ■ Динамический HTTP сессии кластеризация

■ Поддержка кластера информации и меня mbership события ■ Динамическое обнаружение ■ Динамическое масштабирование ■ Динамическое секционирования с резервными ■ Динамическое отказоустойчивость ■ Веб-мониторинг кластера инструмент

+0

Благодарим за отзыв. Я не думаю, что это проблема распределенных вычислений, хотя - я намереваюсь иметь только один игровой сервер, а затем несколько клиентов, расположенных где угодно, передавая сообщения назад и вперед между этим сервером. Извиняюсь, если мое понимание Hazelcast ошибочно (я кое-что прочитал об этом), но я не вижу, как я применил бы это к этому? – Marc

2

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

+0

Спасибо, я не знал об этом до сих пор – Marc

Смежные вопросы