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