node.js - 使用node.js集群时,worker挂掉时如何访问它的环境?

标签 node.js cluster-computing

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

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

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

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

}

我知道这行不通,我的问题是:如何在 worker 临终前获取其环境的最新状态?

最佳答案

似乎env只在worker进程中设置,在master进程中是访问不到的。 Master 只有关于 worker 进程的原始信息。你可以做你想做的事:

// 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;
});

希望对你有帮助。 每当 worker 改变他们的环境时,他们应该发送消息给 master 并通知它这些变化,这样 master 就可以更新它的信息。

关于node.js - 使用node.js集群时,worker挂掉时如何访问它的环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32305870/

相关文章:

node.js - Node/Gulp 与 TFS 构建

node.js - 如何列出给定 grunt 任务依赖于 Makefile 的所有文件?

mysql - Ejabberd 如何管理集群的数据库?

mysql - 数据已存储,但当数据库关闭/重新启动时,数据丢失

redis - 无法向 Redis 集群添加值 - 集群已关闭

javascript - node.js中的路由堆叠

node.js - Microsoft Bot Framework - 提示中的新行

java - 在 tomcat 集群中协调工作人员的最佳方式是什么?

java - 获取权限被拒绝(公钥)。在AWS上启动hadoop集群时

node.js - 在 Node.js 中将内部服务器错误消息转换为客户端可读消息的最佳实践有哪些?