在使用node.js cluster时,如何访问辅助进程';它死的时候是什么环境?
我正在使用node.js集群模块创建工作进程。在分叉时,我在每个工作者的环境中设置了一个自定义变量 当一个工作者死亡时,我需要读取该自定义变量,但当一个工作者死亡时,我无法再访问其环境对象 这就是我迄今为止所尝试的:在使用node.js cluster时,如何访问辅助进程';它死的时候是什么环境?,node.js,cluster-computing,Node.js,Cluster Computing,我正在使用node.js集群模块创建工作进程。在分叉时,我在每个工作者的环境中设置了一个自定义变量 当一个工作者死亡时,我需要读取该自定义变量,但当一个工作者死亡时,我无法再访问其环境对象 这就是我迄今为止所尝试的: var cluster = require('cluster'), os = require('os'); if (cluster.isMaster) { cluster.on('exit', function (worker, code, signal) {
var cluster = require('cluster'),
os = require('os');
if (cluster.isMaster) {
cluster.on('exit', function (worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
var x = {
workerId: worker.process.env.workerId // This is undefined.
};
cluster.fork(x);
});
for (var i = 0; i < os.cpus().length; i++) {
var x = {
workerId: i
};
cluster.fork(x);
}
}
else {
console.log("workerId: ", process.env.workerId);
// simulate an exeption:
throw "fakeError";
}
var cluster=require('cluster'),
os=要求(“os”);
if(cluster.isMaster){
集群打开('exit',功能(工作者、代码、信号){
log('worker'+worker.process.pid+'dead');
变量x={
workerId:worker.process.env.workerId//这是未定义的。
};
簇叉(x);
});
对于(var i=0;i
我知道这行不通,我的问题是:如何访问员工死亡前的最新环境状态?您可以订阅集群的
退出
事件,当集群中的任何员工死亡时,您将收到通知。在这一点上,你可以做任何你想做的事
直接从中选取的代码段
似乎env只在worker进程中设置,在master中不可访问。Master仅具有有关workers进程的基本信息。你可以做你想做的事:
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
var env = {workerId: i},
newWorker = cluster.fork(env);
newWorker.process.env = env;
}
cluster.on('exit', function (worker, code, signal) {
console.log('worker ', worker.process.env.workerId, ' died');
var env = worker.process.env,
newWorker = cluster.fork(env);
newWorker.process.env = env;
});
//Fork workers。
对于(变量i=0;i
我希望它能帮助你。
每当工作人员更改其环境时,他们都应向master发送消息并告知这些更改,以便master可以更新其信息。您可以在集群代码中的对象中维护工作人员进程ID到工作人员ID的映射,以便当工作人员死亡时,您可以获得相应进程ID的工作人员ID。当进程停止时,它的环境消失了。也许你应该解释一下你到底想做什么,也许有更好的方法。
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
var env = {workerId: i},
newWorker = cluster.fork(env);
newWorker.process.env = env;
}
cluster.on('exit', function (worker, code, signal) {
console.log('worker ', worker.process.env.workerId, ' died');
var env = worker.process.env,
newWorker = cluster.fork(env);
newWorker.process.env = env;
});