现场比赛,使用内存或DB或两者兼而有之?

时间:2015-04-18 14:51:20

标签: node.js chess

当前我正致力于使用nodejs&amp ;;创建国际象棋应用程序。 socket.io

现在正在运行的游戏信息存储在如下数组中:

  games[token] = {
    'creator': socket,
    'players': [],
    'interval': null,
    'timeout': timeout,
    'FEN' : '',
    'PGN' : ''
  };

问题是:最好在创建游戏时将游戏信息保存到数据库并更改移动时移动的字段值,或者在完成后保存每个游戏? 哪种方法比较好?

2 个答案:

答案 0 :(得分:2)

如果你等到游戏结束以保存状态,那么如果发生类似服务器崩溃的事情,你就有可能失去它。想想未处理的异常或控制之外的东西,比如容器重启或更糟糕的事情。

保留您希望尽快恢复的所有数据。我可以想象一个RPG,总是能够在地图上恢复球员的确切位置并不是非常重要。看起来你总是希望能够恢复国际象棋比赛的状态。

答案 1 :(得分:2)

如果你想要防撞实施,最便宜的方法是在日志日志中写下每一步。当游戏结束时,您保存状态并丢弃日记。在每个游戏开始加载状态,然后检查日志中是否有任何内容,如果是,则回放事件。

Journal可以在数据库,磁盘或像Redis这样的轻量级数据库中。