2012-09-19 33 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或文件錯誤報告傳遞給它,並等待它們修復它 –