如何在出现错误的情况下保留Node.js服务器上的数据?

我正在与一个严肃的项目Node.js第一次,build立一个多人纸牌游戏。 我正在使用socket.io的websockets。 一旦游戏运行,Node.js服务器应该24/7运行。

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

首先,每次出现错误,整个服务器崩溃。 我会尽量在上线之前消除所有的错误,但是如果我们可以避免在一个纸牌游戏的数据被破坏的情况下杀死整个服务器进程,那还是不错的。 例如,如果我引用一个对象的不存在的元素,Node当然会抛出一个错误。 这很好,但有没有办法来防止这样的事件崩溃的服务器(除了确保这种types的事情不发生在第一位)?

其次,游戏状态在游戏过程中存储在服务器上。 因此,如果有3个游戏正在进行,Node服务器上会有states[1]states[2]states[3] 。 当服务器崩溃,我想以某种方式保持这个数据,以便服务器可以立即重新启动,数据恢复。 我认为节点服务器上的会话不是一个选项,因为他们(可能)会死在服务器,不是? 在每一个游戏动作中将所有内容存储到MySQL似乎是一个巨大的资源浪费(但如果我错了,纠正我)。

这一切归结为:我怎样才能确保服务器可以通过任何潜在的问题自主运行,而不会崩溃,如果它必须崩溃,我怎样才能确保它不会采取所有正在进行的游戏呢?

如果糟糕的状态数据导致您的应用程序崩溃,重新启动后不会重新加载,只会导致另一次崩溃?

在存储数据之前,应始终validation传入数据是否完全有效,无论是在内存中还是在数据库中。

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

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

就进程外存储数据而言,您的应用程序听起来像是Redis这样的简单键值存储的好select。 如果将所有状态数据存储在Redis中,则它将在节点重新启动后仍然存在,性能仍将与进程内存相似。 它还使您能够扩展到单个节点进程以处理重负载的优势。