一个工作线程侦听 NodeJS 中的事件



我想使用 nodejs 的集群模块,但是当事件触发时,当第一个工作线程捕获它时,其他工作线程什么都不做。

var cluster     =   require('cluster')
    numCPUs     =   require('os').cpus().length;
if (cluster.isMaster){
    for (var i = 0; i < numCPUs; i++)
        cluster.fork();
    cluster.on('exit', function(worker, code, signal) {
        cluster.fork();
    });
} else {
    var redis   =   require('redis');
    var client  =   redis.createClient();
    client.on('message',function(channel,message){
        console.log(channel,message);
    });
    client.subscribe("CH_IP");    
}

上面的代码有以下输出

CH_IP {"LOC":"OTHER","PID":1,"SID":1}
CH_IP {"LOC":"OTHER","PID":1,"SID":1}
CH_IP {"LOC":"OTHER","PID":1,"SID":1}
CH_IP {"LOC":"OTHER","PID":1,"SID":1}
CH_IP {"LOC":"OTHER","PID":1,"SID":1}
CH_IP {"LOC":"OTHER","PID":1,"SID":1}
CH_IP {"LOC":"OTHER","PID":1,"SID":1}
CH_IP {"LOC":"OTHER","PID":1,"SID":1}

如何编辑代码以仅运行一个console.log

fork 方法接受键/对值的对象,该对象将添加到工作进程环境中。您可以使用它来标识每个工作人员,并挑出一个来执行工作:

if (cluster.isMaster){
    for (var i = 0; i < numCPUs; i++)
        cluster.fork({ workerId: i+1 });
    // etc...
} else {
    if(process.env.workerId == 1){
        // do stuff
    }
}

最新更新