如何在Node Js应用程序的多个实例之间同步对象

是否有任何locking节点JS应用程序中的任何对象。

是否有多个应用程序实例可用某些function不应该并发运行。 如果实例A函数完成,应该解锁该对象/键或应用程序的一些标识符和B实例应该检查它的解锁是否应该运行一些function。

任何对象或键都可以用来识别locking和解锁function。

如何在具有多个实例的NodeJS应用程序中这样做。

如上所述,Redis可能是您的答案,但是,这实际上取决于您可用的资源。 还有一些其他的可能性不那么复杂,当然也不那么强大,也可能会有诀窍。

  1. 节点caching也可以做到这一点,如果你设置正确。 它不像Redis那么强大,但是在光明的一面,它并不需要和你的环境做太多的设置和互动。

所以有内存锁的Redis和节点caching 。 我应该提到有相当多的NPM软件包来做caching。 取决于你需要什么,以及如何错综复杂的caching需要。

然而,有没有更好的方法来做你想做的,虽然不那么优雅并不一定更糟。

  1. 您可以使用基于JSON文件的系统,并lockingTTL文件。 locking文件或适当的locking文件将完成任务。 您可以根据需要从文件中读取信息,在需要时删除,给它们一个TTL。 基本上caching系统到磁盘。

内存系统显然更快。 文件系统需要与内存系统一样多的代码规划。

  1. 还有另一种方法。 这可能是最危险的一个,你必须在安全和需求方面考虑长期和艰苦的后果。

Node.js有它自己的process.env 。 正如大多数人所知,只要编写process.env.foo ,其中foo将被声明为全局系统variables,就可以使系统全局variables可用。 像.dotenv这样的软件包允许您通过.env文本文件添加到系统variables中。 因此,如果你把那个文件放在sam = mongoDB中,那么在你的代码中你写的process.env.sam就会被解释成mongoDB。 系统范围的variables可以在这里设置。

那么这样做有什么好处,你可能会问吗? 那么这些是系统范围的variables, 它们可以在飞行中改变 。 所以,如果你需要lockingvariables,然后改变他们,这是一个简单的方法来做到这一点。 当心这个问题。 一旦系统closures,或所有进程停止,并再次启动,您的环境variables将返回到.env文件中的默认值。

另外,除非你正在运行一个在AWS或Azure等上有点安全的系统,否则让我的.env文件向世界开放并不安全。 这个方法也有办法。 您可以使用散列来encryption所有variables,并将散列放在文件中。 当你调用它时,在实际请求使用完整variables之前解密。

  1. 有可能有很多方法来locking和解锁,其中不less是使用本地Node.js结构。 将文件系统事件与Crypto结合在一起。 但是这需要更深入地了解实际的Node.js库和结构。

希望有一些帮助。

我强烈build议你的情况下Redis 。

有几种方法可以创build应用程序/进程共享对象,使用locking就是其中之一,正如您所提到的。

但他们只是复杂的。 除非你真的需要自己做,Redis会够好的。 primefaces操作跨越多个进程,交易等。