繁体   English   中英

使用node.js集群时,如何在工作者死亡时访问它?

[英]When using node.js cluster, how to access a worker's environment when it dies?

我正在使用node.js集群模块来创建工作进程。 我在fork它时在每个worker的环境中设置一个自定义变量。

我需要在工作者死亡时读取该自定义变量,但是当工作者死亡时,我无法再访问其环境对象。

这是我到目前为止所尝试的:

var cluster = require('cluster'),
    os = require('os');

if (cluster.isMaster) {

    cluster.on('exit', function (worker, code, signal) {

        console.log('worker ' + worker.process.pid + ' died');

        var x = {
            workerId: worker.process.env.workerId // This is undefined.
        };
        cluster.fork(x);
    });

    for (var i = 0; i < os.cpus().length; i++) {
        var x = {
            workerId: i
        };
        cluster.fork(x);
    }

}
else {
    console.log("workerId: ", process.env.workerId);

    // simulate an exeption:
    throw "fakeError";

}

我知道这不会起作用,我的问题是:如何在死亡之前获得工人的最新状态?

似乎env只设置在worker的进程中,并且无法在master中访问。 大师只有关于工人过程的原始信息。 你可以做你想做的事:

// Fork workers.
for (var i = 0; i < numCPUs; i++) {
    var env = {workerId: i},
        newWorker = cluster.fork(env);
    newWorker.process.env = env;
}

cluster.on('exit', function (worker, code, signal) {
    console.log('worker ', worker.process.env.workerId, ' died');
    var env = worker.process.env,
        newWorker = cluster.fork(env);
    newWorker.process.env = env;
});

我希望它对你有所帮助。 每当工作人员更改他们的环境时,他们应该向主人发送消息并告知其有关这些更改,因此,主人可以更新其信息。

您可以订阅群集的exit事件,当群集中的任何工作者死亡时,您将收到通知。 那时你可以做任何你想做的事。

代码片段直接从文档中选取

cluster.on('exit', function(worker, code, signal) {
      console.log('worker %d died (%s). restarting...',
        worker.process.pid, signal || code);
      cluster.fork();
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM