有没有办法在NodeJS中的多个工作人员之间共享变量?

时间:2014-02-19 21:36:23

标签: node.js

我正在运行节点js应用程序。当它开始时我每个核心创建一个工作者。我需要在我创建的每个worker之间创建一些共享的全局变量。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

对于一小组变量,您可以使用自定义环境生成工作者。例如:

// On the master when creating the process:
cluster.fork({ GLOBAL_VAR_A: 12345 });

// On workers:
var globalA = parseInt(process.env.NODE_GLOBAL_VAR_A, 10);

我在这里放了parseInt来强调环境变量是字符串。这应该只用于一些变量,因为它显然会严重缩放。

虽然有两个重要的选择

  • 配置文件:大多数情况下,您要共享的数据实际上是配置。配置可以简单地存储在文件中,并且所有工作人员将读取相同的数据。
  • 数据库:另一个是通过数据库共享状态。例如,如果您真的需要,redis pubsub允许您在工作者之间维护同步变量。

正如alex的回答中所提到的,原生集群IPC也是一种选择,但实际上是用于主人和工人之间的沟通。您不希望主进程执行太多操作以避免可能导致未捕获异常的错误。也许值得一看zeromq等。

答案 1 :(得分:2)

不,没有办法做到这一点。

Node.js工作者是故意彼此独立的,只有他们进行通信的方法是通过某个通道(TCP / Pipe / IPC /等)发送序列化对象。

相关问题