exp*_*oob 8 javascript database node.js
我正在用javascript编写一个游戏,并且为了防止作弊,我正在服务器上玩游戏(这是一个类似于更复杂的跳棋的棋盘游戏).由于游戏相当复杂,我需要存储游戏状态以验证客户端操作.
是否可以将游戏状态存储在内存中?这很聪明吗?我应该这样做吗?如果是这样,怎么样?我不知道那是怎么回事.
我也可以存储在redis中.这种事情对我来说非常熟悉,不需要解释.但是如果我存储在redis中,问题在于,在每一次移动中,游戏都需要从redis获取数据并解释和解析该数据,以便从头开始重新创建游戏状态.但由于动作频繁发生,这对我来说似乎非常愚蠢.
我该怎么办?
如果您确实真的不想I / O的开销,那么只需将游戏状态存储在以游戏ID为键的全局对象中:
var global_gamesate = {}
Run Code Online (Sandbox Code Playgroud)
然后在每个连接上检查游戏ID是什么,以检索游戏状态:
var gamestate = global_gamestate[game_id];
Run Code Online (Sandbox Code Playgroud)
大概您已经有了一种将客户端会话映射到游戏ID的机制。
通常,游戏状态很小,几乎不会占用太多RAM。让我们感到悲观,并假设每个游戏状态占用500K。然后,您可以为服务器上每GB的RAM 服务200 万个游戏(如果假设每个游戏两个用户,则可以提供40 万个用户)。
但是,我想指出的是,像MySQL这样的数据库已经实现了缓存(可配置),因此加载最常用的数据基本上是从RAM加载的,而套接字I / O开销很小。数据库的优点是您可以拥有比RAM多得多的数据,因为它们将剩余的数据存储在磁盘上。
如果您的程序曾经达到负载,那么您就开始考虑编写自己的磁盘序列化算法来实现交换文件,那么您基本上就是在重新发明轮子。在这种情况下,我会说数据库。
归档时间: |
|
查看次数: |
1737 次 |
最近记录: |