Я нахожусь в процессе написания пошаговой карточной игры на Java, но мне нужно несколько советов, как сделать ее многопользовательской. Игроки могут создать многопользовательскую игру, а затем другие могут присоединиться к этой игре, по очереди играя свой ход. Я часами изучал различные способы реализации этого, но мог бы действительно помочь. Я перечислю требования и то, что я до сих пор узнал:
- Это полностью Java-игра, поэтому использование чего-то вроде RMI не является проблемой по этой причине
- Игрок делает ход, этот ход отправляется на сервер, сервер отправляет этот ход другим игрокам (клиентам) в игре.
- Сервер должен хранить все игры в процессе и игроков в них (в настоящее время это делается с
HashMap<UniqueGameID, GameObject>
.
Я до сих пор экспериментировал с сокетами и RMI, и кажется:
RMI
+
Обрабатывает многопоточность и доступ к хэш-карте
-
Либо нужно опросить сервер, чтобы узнать, переместился ли игрок, либо использовать обратные вызовы, которые не работают через брандмауэры
Гнезда
+
Допускает асинхронные обратные вызовы (?)
-
Не удается легко получить доступ к hashmap из нескольких потоков, которые создаются (?)
-
Сложнее, чем RMI
Я также изучал JMS, JINI / JavaSpaces, JGroups и все остальное, что я могу найти, но я понятия не имею, какой из них будет работать лучше всего. У меня есть клиентская> серверная часть RMI, но сервер-> клиент кажется невозможным, так как опрос настолько неэффективен и не масштабируется
Буду очень признателен за любые ваши советы.
Большое спасибо
РЕДАКТИРОВАТЬ: С тех пор я обнаружил ConcurrentHashMap, который, я думаю, решает одну из моих проблем.