IonianWind
@IonianWind

Как организовать восстановление состояния игры после разрыва связи?

Суть такова:

Пишу онлайн-игру с использованием node.js и WebSockets (socket.io).

С открытием игрового меню инициализируется сессия приложения.

Далее, пользователь может начать новую игру. Создается игровая комната, и ожидается, пока кто-то еще не захочет играть, после чего игра начинается.



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



На мой взгляд, сложность в возможности запуска нескольких экземпляров окон с игрой, и не все окна могут связь потерять, плюс в один момент времени пользователь может играть только в одной игровой комнате, создание новых должно пресекаться до завершения текущей игры.
  • Вопрос задан
  • 3072 просмотра
Пригласить эксперта
Ответы на вопрос 3
В абсолютном большинстве браузерных игр принято состояние игрока сохранять в базе. В вашем случаи понадобятся две таблицы: состояние игрока и состояние игровой комнаты.
Ответ написан
Комментировать
InteractiveTechnology
@InteractiveTechnology
CEO, Interactive Technology Group (ITG)
В socket.io на каждую сессию (клиент-серверное подключение) создаёт уникальный UID. При создании комнаты создайте url чтобы параметром в нём был этот самый UID и присваивайте при создании нового подключения уже этот самый UID, таким образом при архитектуре игры, если 2 игрока у вас всё же связаны по этим самым UID в базе, то выведется им нужная игра, даже после обновления страницы. Это если делать всё через socket.io с жёсткой привязкой.
А второй вариант основанный на этой же логике, но без привязки к socket.io. Генерируйте на каждую игру уникальный хэш, при создании комнаты игроков переводите по url с параметром этого уникального хеша (хэш для разных игроков отличается) и этот же хеш привязывает их в игре к конкретному игроку.
Надеюсь понятно объяснил, если что спрашивайте :)
Ответ написан
Комментировать
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
Наверное, уже не актуально, но все таки...
Почему бы не прописать в БД пользователю этот самый ID комнаты?
При обновлении страницы происходит запрос к БД, откуда и получается комната, в которой происходит игра.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы