我有工作(股票)脚本从
node
var cluster = require('cluster'); var http = require('http'); var numReqs = 0; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < 2; i++) { var worker = cluster.fork(); worker.on('message',function(msg) { if (msg.cmd && msg.cmd == 'notifyRequest') { numReqs++; } }); } setInterval(function() { console.log("numReqs =",numReqs); },1000); } else { // Worker processes have a http server. http.Server(function(req,res) { res.writeHead(200); res.end("hello world\n"); // Send message to master process process.send({ cmd: 'notifyRequest' }); }).listen(8000); }
在上述脚本中,我可以轻松地将数据从worker发送到master进程.但是如何从主人员发送数据到工作人员?举个例子,如果可能的话.
解决方法
因为cluster.fork是在
child_process.fork之上实现的,所以你可以使用worker.send({msg:’test’})从master发送消息,通过process.send({msg :’test’});.你收到如下消息:worker.on(‘message’,callback)(从worker到master)和process.on(‘message’,callback); (从主人到工作人员).
这是我的完整示例,您可以通过浏览http://localhost:8000/进行测试然后工作人员将向主人发送消息,主人将回复:
var cluster = require('cluster'); var http = require('http'); var numReqs = 0; var worker; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < 2; i++) { worker = cluster.fork(); worker.on('message',function(msg) { // we only want to intercept messages that have a chat property if (msg.chat) { console.log('Worker to master: ',msg.chat); worker.send({ chat: 'Ok worker,Master got the message! Over and out!' }); } }); } } else { process.on('message',function(msg) { // we only want to intercept messages that have a chat property if (msg.chat) { console.log('Master to worker: ',msg.chat); } }); // Worker processes have a http server. http.Server(function(req,res) { res.writeHead(200); res.end("hello world\n"); // Send message to master process process.send({ chat: 'hey master,I got a new request!' }); }).listen(8000); }