繁体   English   中英

node.js存储游戏状态,怎么样?

[英]node.js storing gamestate, how?

我正在用javascript编写一个游戏,并且为了防止作弊,我正在服务器上玩游戏(这是一个像更复杂的棋子的棋盘游戏)。 由于游戏相当复杂,我需要存储游戏状态以验证客户端操作。

是否可以将游戏状态存储在内存中? 这很聪明吗? 我应该这样做吗? 如果是这样,怎么样? 我不知道那是怎么回事。

我也可以存储在redis中。 这种事情对我来说非常熟悉,不需要解释。 但是如果我存储在redis中,问题在于,在每一次移动中,游戏都需要从redis获取数据并解释和解析该数据,以便从头开始重新创建游戏状态。 但由于动作频繁发生,这对我来说似乎非常愚蠢。

我该怎么办?

如果你真的,真的不想要I / O的开销,那么只需将游戏状态存储在由游戏ID键入的全局对象中:

var global_gamesate = {}

然后在每个连接上检查游戏ID是什么来检索他的游戏状态:

var gamestate = global_gamestate[game_id];

据推测,您已经有了一种将客户端会话映射到游戏ID的机制。

通常,游戏状态很小,几乎不会占用太多RAM。 让我们感到悲观,并假设每个游戏状态占用500K。 然后,您可以为服务器上的每GB内存服务两 百万 个游戏(如果我们假设每个游戏有两个用户,则可以投入四 百万 用户)。


但是,我想指出像MySQL这样的数据库已经实现了缓存(可配置),因此加载最常用的数据基本上是从RAM中加载的,具有次要的套接字I / O开销。 数据库的优点是,您可以拥有比RAM更多的数据,因为它们将其余数据存储在磁盘上。

如果您的程序到达负载,您开始考虑编写自己的磁盘序列化算法来实现交换文件,那么您基本上是在重新发明轮子。 在这种情况下,我会说去数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM