NodeJS process.send停止工作

我正在尝试一下NodeJS。 我遇到以下代码的问题。 过了一段时间,从工作人员发送到群集中的主服务器的消息看上去不再被处理。

这是NodeJS网站上的一个集群示例的变体。

var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { console.log("Starting cluster ..."); for (var i = 0; i < numCPUs; i++) { var worker = cluster.fork(); worker.on('death', function(worker) { console.log('worker ' + worker.pid + ' died. restart...'); cluster.fork(); }); worker.on('message', function(msg) { if (msg.cmd == 'reached') { console.log('Worker %d reached another 10000', msg.workerId); } }); } } else { console.log("Started worker %d ...", process.env.NODE_WORKER_ID); var i = 0; while (true) { if (i++ % 10000 == 9999) { process.send({ cmd: 'reached' , workerId: process.env.NODE_WORKER_ID }); console.log('haha'); } } } 

当代码运行时,预期的消息“Worker 1达到另一个10000”已经打印好了。 但是仅仅几秒钟之后,它就会停止,并且只打印出process.send后面的“哈哈”。

我究竟做错了什么 ?

我正在使用NodeJS 0.6.6

你的问题是使用while(true) ,这阻止了事件循环。 你再也不能使用这样的事情了。 相反,你应该使用setTimeoutprocess.nextTick 。 这是一个正确的例子:

 var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { console.log("Starting cluster ..."); for (var i = 0; i < numCPUs; i++) { var worker = cluster.fork(); worker.on('death', function(worker) { console.log('worker ' + worker.pid + ' died. restart...'); cluster.fork(); }); worker.on('message', function(msg) { if (msg.cmd == 'reached') { console.log('Worker %d reached another 10000', msg.workerId); } }); } } else { console.log("Started worker %d ...", process.env.NODE_WORKER_ID); function repeatable(i) { if (i++ % 10000 == 9999) { process.send({ cmd: 'reached' , workerId: process.env.NODE_WORKER_ID }); console.log('haha'); } setTimeout(function() { repeatable(i); }, 1); } var i = 0; repeatable(i); }