2012-09-19 34 views
8

我传递参数时,创建子女学费流程的Node.js fork函数和参数传递给子进程

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

但这种变种ISN不存在,为什么?

节点v0.8.8

回答

11

似乎为我工作在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 
+0

但对我来说(我做了新的应用程序与你的相同)它不起作用,输出是八个“未定义”。它可能是什么?我在Unix下工作x64(freebsd) – ElSajko

+0

我发现原因,当我使用这行代码它不起作用时,为什么?:var server_store = new(require(“socket.io-clusterhub”)); – ElSajko

+3

因为socket.io-clusterhub依赖关系clusterhub,https://github.com/fent/clusterhub覆盖了cluster.fork方法,并且不会将env传递给原始方法。解决方法是编辑/node_modules/clusterhub/lib/fork.js,它覆盖了cluster.fork方法,以便将上面的clusterhub项目的env或文件错误报告传递给它,并等待它们修复它 –