Node.js – 并发写入和读取对象

那么,我一直在寻找这个主题,但没有find它,所以我会问你:

我需要在服务器上的数组上编写数据,因此我决定不使用数据库,但我不知道最佳实践是什么? 这将是很多的数据,它可以是一个JavaScript数组? 是否可以读取和写入一个非阻塞方法,但避免并发问题?

这是一款MMORPG,多人在线游戏,数据全部在线玩家。 这个过程几乎会在玩家的每一个步骤上写下来,然后再读取。 我正在考虑一个孩子的过程,或者更快地做这个过程而不是阻塞,但是我甚至知道孩子的过程是HAHA!

谢谢

由于Node.js是单线程的,任何时候你的代码都在做什么,它在技术上阻止了进程的执行。 一旦它达到了等待callback的地步,节点将开始处​​理其他请求,直到你的callback回来。 多less数据是“很多”? 你需要怎样处理这些数据?

如果你对数据没有太多的处理,而且有很多的话,那么数据库解决scheme不是一个坏主意。 数据库的节点驱动程序(MongoDB,Redis等)是asynchronous和非阻塞的,所以Node可以很好地交叉调用,从而可以同时处理大量和大量的调用。 像这样使用存储(而不仅仅是内存)也意味着可以使用节点集群来启动多个节点进程,以便在您的机器上使用多个内核(以及使用多台机器)来响应请求。

如果你没有对数据做太多的处理,而且数据集非常小,而且你不关心在Node进程之间共享数据,那么当然可以把它保存在你想要的任何数据结构的内存中。 数组,字典或类似LRUcaching的东西。

如果你对数据做了大量的处理,并且有很多的处理,那么你需要做更多的工作,因为这不是节点最大的优势(处理阻塞了唯一的线程,这意味着它可以不处理额外的请求)。 我会build议像一个PubSub模型与一个非阻塞队列与工作进程处理处理。