如何在Windows上运行节点群集?

任何人都知道如何在Windows上运行节点群集? 我一直没有find网上的任何文章,似乎无法解决这个问题:

events.js:160 throw er; // Unhandled 'error' event ^ Error: write ENOTSUP at exports._errnoException (util.js:1007:11) at ChildProcess.target._send (internal/child_process.js:634:20) at ChildProcess.target.send (internal/child_process.js:521:19) at sendHelper (cluster.js:751:15) at send (cluster.js:534:12) at cluster.js:509:7 at SharedHandle.add (cluster.js:99:3) at queryServer (cluster.js:501:12) at Worker.onmessage (cluster.js:449:7) at ChildProcess.<anonymous> (cluster.js:765:8) 

而代码…

 if (cluster.isMaster) { for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('online', (worker) => { console.log('Worker ' + worker.process.pid + ' is online'); }); cluster.on('exit', (worker, code, signal) => { console.log(`Worker ${worker.process.pid} died with code ${code} and signal ${signal}`); }); } else { console.log('else part '); openPort(); } function openPort() { let server = dgram.createSocket('udp4'); server.bind(port, host); server.on('message', processMessage); } 

在v0.11.14中增加了对UDP集群的支持(对于Linux和OSX)。 检查node.js master上的文件 ,其中显示“dgram集群目前不支持在Windows上”

在当前节点js版本中,我使用下面的代码在Windows上创build集群。

 var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log("worker ${worker.process.pid} died"); cluster.fork(); }); } else { var express = require('express'); var http = require('http'); // init app var app = express(); function createServer(app) { return http.createServer(app); } app.locals.server = createServer(app); app.locals.server.listen(port, function() { console.info("server online"); }); } 

这将在同一端口上创build群集。

所以,为了在Windows上使用UDP与节点集群,你必须像这样调用server.bind:

 server.bind({port: 1900, exclusive: true}, function () { console.log('PORT BIND SUCCESS'); server.setBroadcast(true); server.setMulticastTTL(128); server.addMembership(multicastAddress, myIp); }); 

关键部分是将对象{port:PORT,exclusive:true}传递给绑定函数。 我在这里find了答案: https : //github.com/misterdjules/node/commit/1a87a95d3d7ccc67fd74145c6f6714186e56f571