从主服务器访问工作人员环境(Node.js群集)

我通过Cluster模块在Node.js应用程序中分配工作人员,并将自定义ID传递给我所有工作人员的环境。 这很好。

但是,我不知道如何在发送“在线”或“退出”事件时在主服务器中访问此ID。

文档不是很有帮助。 你能指点一下吗?

var cluster = require('cluster'); if (cluster.isMaster) { //MASTER function fork() { var worker_env = {worker_id:'my_custom_id'}; cluster.fork(worker_env); } cluster.on('online', function(worker) { console.log(worker.process.env.worker_id); // undefined // // How can I access my custom worker id here? // }); cluster.on('exit', function(worker, code, signal) { // // And here...? // fork(); }); } else { // WORKER console.log(process.env.worker_id); // my_custom_id } 

theres没有办法,工作进程env不暴露给主人。

一个aproach可以是我们的集群地图(一个对象包含所需的信息)。

像这样的东西:

 var cluster = require('cluster'); if (true === cluster.isMaster) { //CODE EXECUTED BY MASTER var cluster_map = {}; // Here we store the workers info in a object var restart_Limit = 10; // max global worker restart (10) function fork_worker(myWorkerId) { // these makes worker_id available in the worker var worker = cluster.fork({ worker_id: myWorkerId }); // max restarts limit (global) if (worker.id >= restart_Limit) { console.log('Restart limit reached, bye!'); process.kill(); } // here we add the key "myWorkerId" to the cluster map cluster_map[worker.id] = myWorkerId; // WORKER AUTO-KILL setTimeout(function() { console.log('stoping...' + myWorkerId); worker.kill(); }, 3000); } cluster.on('online', function(worker) { var online_proc = cluster_map[worker.id]; console.log('worker online: ' + online_proc + '\n Restarts: ' + worker.id); }); cluster.on('exit', function(worker, code, signal) { var exited_proc = cluster_map[worker.id]; // delete the process from the cluster map delete cluster_map[worker.id]; console.log("worker offline: " + exited_proc); // WORKER AUTO-RESTART setTimeout(function() { console.log('Restarting... ' + exited_proc); fork_worker(exited_proc); }, 3000); }); // start the magic ( 3 workers ) (function() { fork_worker('id_1'); fork_worker('id_2'); fork_worker('id_3'); })(); } else { //CODE EXECUTED BY EACH WORKER (process env is present here). console.log('hi from the worker, process.env: ' + process.env.worker_id); // all the hard work for the workers here. } 
Interesting Posts