在使用node.js cluster时,如何访问辅助进程';它死的时候是什么环境?

在使用node.js cluster时,如何访问辅助进程';它死的时候是什么环境?,node.js,cluster-computing,Node.js,Cluster Computing,我正在使用node.js集群模块创建工作进程。在分叉时,我在每个工作者的环境中设置了一个自定义变量 当一个工作者死亡时,我需要读取该自定义变量,但当一个工作者死亡时,我无法再访问其环境对象 这就是我迄今为止所尝试的: var cluster = require('cluster'), os = require('os'); if (cluster.isMaster) { cluster.on('exit', function (worker, code, signal) {

我正在使用node.js集群模块创建工作进程。在分叉时,我在每个工作者的环境中设置了一个自定义变量

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

这就是我迄今为止所尝试的:

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";

}
var cluster=require('cluster'),
os=要求(“os”);
if(cluster.isMaster){
集群打开('exit',功能(工作者、代码、信号){
log('worker'+worker.process.pid+'dead');
变量x={
workerId:worker.process.env.workerId//这是未定义的。
};
簇叉(x);
});
对于(var i=0;i

我知道这行不通,我的问题是:如何访问员工死亡前的最新环境状态?

您可以订阅集群的
退出
事件,当集群中的任何员工死亡时,您将收到通知。在这一点上,你可以做任何你想做的事

直接从中选取的代码段


似乎env只在worker进程中设置,在master中不可访问。Master仅具有有关workers进程的基本信息。你可以做你想做的事:

// 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;
});
//Fork workers。
对于(变量i=0;i
我希望它能帮助你。
每当工作人员更改其环境时,他们都应向master发送消息并告知这些更改,以便master可以更新其信息。

您可以在集群代码中的对象中维护工作人员进程ID到工作人员ID的映射,以便当工作人员死亡时,您可以获得相应进程ID的工作人员ID。当进程停止时,它的环境消失了。也许你应该解释一下你到底想做什么,也许有更好的方法。
// 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;
});