Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果出现错误,如何在Node.js服务器上保留数据?_Node.js - Fatal编程技术网

如果出现错误,如何在Node.js服务器上保留数据?

如果出现错误,如何在Node.js服务器上保留数据?,node.js,Node.js,我第一次与Node.js合作进行一个严肃的项目,构建一个多人纸牌游戏。我正在为WebSocket使用socket.io。一旦游戏上线,Node.js服务器应该全天候运行 目前,我有几个问题需要解决。为了清楚起见,我将把它们分成下面的两个子问题 首先,每次出现错误,整个服务器都会崩溃。当然,在上线之前,我会尝试消除所有的bug,但如果我们能够避免在一个纸牌游戏的数据被破坏时杀死整个服务器进程,那还是很好的。例如,如果我引用一个对象中不存在的元素,Node当然会抛出一个错误。这很好,但是有没有办法防

我第一次与Node.js合作进行一个严肃的项目,构建一个多人纸牌游戏。我正在为WebSocket使用socket.io。一旦游戏上线,Node.js服务器应该全天候运行

目前,我有几个问题需要解决。为了清楚起见,我将把它们分成下面的两个子问题

首先,每次出现错误,整个服务器都会崩溃。当然,在上线之前,我会尝试消除所有的bug,但如果我们能够避免在一个纸牌游戏的数据被破坏时杀死整个服务器进程,那还是很好的。例如,如果我引用一个对象中不存在的元素,Node当然会抛出一个错误。这很好,但是有没有办法防止此类事件导致服务器崩溃(除了确保这种情况不会发生之外)

其次,游戏状态在游戏过程中存储在服务器上。因此,如果有3个游戏正在进行中,那么节点服务器上将有
状态[1]
状态[2]
状态[3]
。当服务器崩溃时,我希望以某种方式保留这些数据,以便服务器可以立即重新启动并恢复数据。我认为节点服务器上的会话不是一个选项,因为它们(可能)会随着服务器一起消亡,不是吗?在每一个游戏动作中都将所有内容存储到MySQL似乎是一种巨大的资源浪费(如果我错了,请纠正我)


这一切可以归结为:我如何确保服务器能够在没有崩溃的情况下自主地处理任何潜在问题,如果它必须崩溃,我如何确保它不会占用所有正在进行的游戏?

如果坏的状态数据导致你的应用程序崩溃,重新启动后重新加载它不会导致另一次崩溃吗

在将传入数据存储在内存或数据库中之前,您应该始终验证其是否完全有效

每当访问可能不存在的对象的属性时,始终检查该对象是否存在

if (state[n].obj && state[n].obj.prop == val) ...

至于在进程外存储数据,你的应用程序听起来像是一个像Redis这样的简单键值存储的好选择。如果您将所有状态数据存储在Redis中,它将在节点重新启动后仍然有效,并且性能仍将类似于进程内存中的性能。它还使您能够扩展到单节点进程之外,以处理重载。

谢谢,我将研究Redis。对于导致另一次崩溃的重新加载,Redis在这方面有何帮助?我能让它记住是什么导致了这次撞车吗?这没有用,这就是我的观点:你需要修复撞车的原因。在节点进程之外持久保存坏数据只会使情况变得更糟。