NodeJS在使用web套接字时存储数据的可能性最好

我正在用NodeJS和Socket.io开发一个基于回合的游戏,在这个游戏之间存储了大量的信息。

我想知道什么是最好的方法来处理可以说,成千上万的用户。

目前我使用全局variables来存储与“决斗”全局variables中的匹配相关的所有内容,其中关键是dynamic创build的空间:

duels[room].character_1 = character_1; duels[room].character_opponent_1 = character_opponent_1; duels[room].player_1_moves = {//really big object}; duels[room].player_2_moves = {//really big object}; 

我不确定这是否是处理数千用户的最佳方式。 至less记忆明智。

我见过2个其他选项:

第一:使用会话variables来存储数据,但是这在我看来会占用大量的服务器内存(RAM),最好的全局variables或会话? 或者他们都很糟糕?

第二:我正在使用MongoDB,是否可以select在我的数据库中不断插入和检索信息并将其存储在那里? 我有一个感觉,如果我发送太多的查询到我的数据库将崩溃。

基本上,在这一点上我不知道在哪里存储所有这些信息,而不冒我的服务器性能的风险。 我接受任何方法。

当纯粹为了性能而进行优化时,只要你有足够的内存用于你正在做的事情,并且只要你不试图在多个服务器实例之间共享数据(就像在集群中一样),内存总是最好的。

所以,这实际上是由于每个用户消耗了多less内存以及您真正需要支持多less用户。 而且,你可以在服务器进程中轻松地使用这么多内存,而不会引起任何问题。 由于您没有提供任何内存使用指标供我们评论,所以您必须对此进行衡量和决定。

另一个你没有提到的选项可以和node.js集群一起使用,就是使用单独的redis进程来存储/检索数据。 redis是一个内存中的存储,但是因为它在另一个进程中,所以可以从多个进程访问它(它与node.js集群兼容),并且它将RAM存储的使用从node.js进程中移出。 您仍然需要在服务器中拥有足够的RAM来避免出现问题,但是将存储从node.js进程中取出可以提高node.js本身的性能(对于垃圾回收来说可以减less的东西),并且可以让您更有效地使用服务器的所有RAM资源。