Как организовать восстановление состояния игры после разрыва связи?
Суть такова:
Пишу онлайн-игру с использованием node.js и WebSockets (socket.io).
С открытием игрового меню инициализируется сессия приложения.
Далее, пользователь может начать новую игру. Создается игровая комната, и ожидается, пока кто-то еще не захочет играть, после чего игра начинается.
Вопрос в том, как организовать восстановление данных игры, если связь с пользователем прервалась — либо пользователь отсоединился, либо сервер отрубился, либо что-то еще.
На мой взгляд, сложность в возможности запуска нескольких экземпляров окон с игрой, и не все окна могут связь потерять, плюс в один момент времени пользователь может играть только в одной игровой комнате, создание новых должно пресекаться до завершения текущей игры.
В абсолютном большинстве браузерных игр принято состояние игрока сохранять в базе. В вашем случаи понадобятся две таблицы: состояние игрока и состояние игровой комнаты.
В socket.io на каждую сессию (клиент-серверное подключение) создаёт уникальный UID. При создании комнаты создайте url чтобы параметром в нём был этот самый UID и присваивайте при создании нового подключения уже этот самый UID, таким образом при архитектуре игры, если 2 игрока у вас всё же связаны по этим самым UID в базе, то выведется им нужная игра, даже после обновления страницы. Это если делать всё через socket.io с жёсткой привязкой.
А второй вариант основанный на этой же логике, но без привязки к socket.io. Генерируйте на каждую игру уникальный хэш, при создании комнаты игроков переводите по url с параметром этого уникального хеша (хэш для разных игроков отличается) и этот же хеш привязывает их в игре к конкретному игроку.
Надеюсь понятно объяснил, если что спрашивайте :)
Наверное, уже не актуально, но все таки...
Почему бы не прописать в БД пользователю этот самый ID комнаты?
При обновлении страницы происходит запрос к БД, откуда и получается комната, в которой происходит игра.