node.js хранит состояние игры, как? - PullRequest
6 голосов
/ 15 января 2011

Я пишу игру на javascript, и, чтобы избежать мошенничества, я играю на сервере (это настольная игра, похожая на более сложные шашки). Поскольку игра довольно сложная, мне нужно сохранить состояние игры, чтобы проверить действия клиента.

Можно ли хранить состояние игры в памяти? Это умный? Должен ли я сделать это? Если так, то как? Я не знаю, как это будет работать.

Я также могу хранить в Redis. И такие вещи мне довольно знакомы и не требуют объяснений. Но если я сохраню данные в Redis, проблема в том, что при каждом перемещении игра должна получать данные из Redis, интерпретировать и анализировать эти данные, чтобы воссоздать состояние игры с нуля. Но так как движения происходят очень часто, это кажется мне очень глупым.

Что мне делать?

1 Ответ

4 голосов
/ 16 января 2011

Если вы действительно, действительно не хотите накладных расходов на ввод-вывод, просто сохраните состояние игры в глобальном объекте с ключом идентификатора игры:

var global_gamesate = {}

Затем при каждом подключении проверяйте, какой идентификатор игры используется для получения состояния игры:

var gamestate = global_gamestate[game_id];

Предположительно, у вас уже есть механизм для привязки клиентских сессий к идентификатору игры.

Обычно игровое состояние невелико и вряд ли займет много памяти. Давайте будем пессимистичными и предположим, что каждое игровое состояние занимает 500К. Затем вы можете обслуживать две миллиона тысяч игр (четыре миллиона тысяч пользователей, если мы предположим, что на игру приходится по два пользователя) на каждый гигабайт оперативной памяти на вашем сервере.


Однако я хотел бы отметить, что в базах данных, таких как MySQL, уже реализовано кэширование (которое настраивается), поэтому загрузка наиболее часто используемых данных в основном загружается из ОЗУ с незначительными издержками ввода-вывода сокетов. Преимущества баз данных в том, что вы можете иметь гораздо больше данных, чем у вас, потому что они хранят остальное на диске.

Если ваша программа когда-либо достигает нагрузки, когда вы начинаете думать о написании собственного алгоритма сериализации диска для реализации файла подкачки, тогда вы в основном изобретаете колесо. В таком случае я бы сказал, пойти с базами данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...