如何保留共享节点集群中所有节点进程的变量?

lah*_*mal 19 javascript node.js node-cluster

似乎所有节点woker进程都在运行,就像它正在执行同一应用程序的新副本一样.但是希望保留节点集群中所有节点工作者(子进程)共享的一些变量.有一个简单的方法吗?

Flo*_*oby 19

所有工作进程确实是应用程序的新副本.每个worker都是使用child_process.spawn创建的全功能进程.所以不,他们不共享变量.这可能是最好的方式.如果要在工作进程(通常是会话)之间共享信息,则应考虑将这些信息存储在数据库中.

如果您已准备好一直使用节点,则可以使用类似dnode的工具让您的工作人员向主进程请求数据.


小智 12

您可以尝试在主进程和子进程之间进行通信.例如:

script test.master.js:

var cluster = require('cluster');
var childScript = __dirname + '/test.child.js';

cluster.setupMaster({ exec: childScript });

proc = cluster.fork();
proc.on('message', function(message) {
    console.log('message from child: ', message);
    proc.send('Hello from master!');
});
Run Code Online (Sandbox Code Playgroud)

脚本test.child.js:

console.log('Child initializing..');

process.on('message', function(message) {
    console.log('message from master: ', message);
});

process.send('Hello from Child!');
Run Code Online (Sandbox Code Playgroud)


vod*_*095 5

我为此使用了外部内存缓存或Redis服务器。

  • 这更适合作为评论而不是作为答案 (5认同)
  • 你能分享一个例子吗?我正在尝试从 memcache 中的 child 中获取数据集以从 master 中获取,但无法正常工作 (2认同)