Если вы действительно, действительно не хотите накладных расходов на ввод-вывод, просто сохраните состояние игры в глобальном объекте с ключом идентификатора игры:
var global_gamesate = {}
Затем при каждом подключении проверяйте, какой идентификатор игры используется для получения состояния игры:
var gamestate = global_gamestate[game_id];
Предположительно, у вас уже есть механизм для привязки клиентских сессий к идентификатору игры.
Обычно игровое состояние невелико и вряд ли займет много памяти. Давайте будем пессимистичными и предположим, что каждое игровое состояние занимает 500К. Затем вы можете обслуживать две миллиона тысяч игр (четыре миллиона тысяч пользователей, если мы предположим, что на игру приходится по два пользователя) на каждый гигабайт оперативной памяти на вашем сервере.
Однако я хотел бы отметить, что в базах данных, таких как MySQL, уже реализовано кэширование (которое настраивается), поэтому загрузка наиболее часто используемых данных в основном загружается из ОЗУ с незначительными издержками ввода-вывода сокетов. Преимущества баз данных в том, что вы можете иметь гораздо больше данных, чем у вас, потому что они хранят остальное на диске.
Если ваша программа когда-либо достигает нагрузки, когда вы начинаете думать о написании собственного алгоритма сериализации диска для реализации файла подкачки, тогда вы в основном изобретаете колесо. В таком случае я бы сказал, пойти с базами данных.