Node.js的fork函数和向子进程传递参数

12

创建子进程时,我传递了参数。

if (cluster.isMaster) {
    for (var i = 0; i < os.cpus().length; i++) {
        var new_worker_env = {};
        new_worker_env["WORKER_NAME"] = "worker" + i;

        var new_worker = cluster.fork(new_worker_env);
    }
}

然后尝试在子节点中读取它:

if ( process.env["WORKER_NAME"] != undefined ) instance.name = process.env["WORKER_NAME"];

但是这个变量不存在,为什么呢?

Node v0.8.8

1个回答

19

在我的机器上,Windows平台,Node.js版本为0.8.8时似乎可以正常工作。

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

if (cluster.isMaster) {
    for (var i = 0; i < os.cpus().length; i++) {
        var new_worker_env = {};

        new_worker_env["WORKER_NAME"] = "worker" + i;

        var new_worker = cluster.fork(new_worker_env);
    }
} else {
    console.log(process.env['WORKER_NAME']);
}

输出:

worker0
worker1

但是对于我来说(我制作了与你相同的新应用程序),它不起作用,输出为八个“未定义”。可能是什么原因?我在Unix x64(freebsd)下工作。 - ElSajko
我发现一个问题,当我使用这行代码时它不起作用,为什么呢?:var server_store = new (require("socket.io-clusterhub")); - ElSajko
4
这是因为socket.io-clusterhub依赖于clusterhub(https://github.com/fent/clusterhub),它重写了cluster.fork方法并没有将env参数传递给原始方法。解决办法是编辑/node_modules/clusterhub/lib/fork.js文件,在重写的cluster.fork方法中添加传递env参数的代码,或者向上面提到的clusterhub项目提交错误报告并等待修复。 - Jason Brumwell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接