node.js fork函数并将参数传递给child-process

ElS*_*jko 9 node.js

我在创建chlid-processes时传递参数

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后尝试在孩子中阅读它:

if ( process.env["WORKER_NAME"] != undefined ) instance.name = process.env["WORKER_NAME"];
Run Code Online (Sandbox Code Playgroud)

但这个var不存在,为什么?

节点v0.8.8

Jas*_*ell 14

似乎在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']);
}
Run Code Online (Sandbox Code Playgroud)

输出:

worker0
worker1
Run Code Online (Sandbox Code Playgroud)

  • 因为socket.io-clusterhub依赖关系clusterhub,https://github.com/fent/clusterhub,会覆盖cluster.fork方法,并且不会将env传递给原始方法.解决方法是编辑/node_modules/clusterhub/lib/fork.js,它会覆盖cluster.fork方法以传递env或使用上面的clusterhub项目提交错误报告并等待它们修复它 (4认同)