【发布时间】:2016-02-06 01:22:06
【问题描述】:
在 Node.js 中,我在子进程中使用 dgram 时遇到问题。如果我尝试从多个工作进程发送 UDP 消息,则实际上只会发送来自其中一个进程的消息。
如果您运行下面的代码并运行 Netcat 之类的东西来监听 UDP (nc -ul 8111),您应该会看到只有一个工作人员成功发送 UDP 消息,即使有多个工作人员登录到控制台.
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
const dgram = require('dgram');
function doSocketStuff() {
var socket = dgram.createSocket('udp4');
var workerId = cluster.isMaster ? 'master' : cluster.worker.id;
setInterval(() => {
console.log("Worker " + workerId);
var message = new Buffer("UDP from " + workerId + "\n");
socket.send(message, 0, message.length, 8111, 'localhost');
}, 1000);
}
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
doSocketStuff();
}
我在使用 Node.js 5.1.0 的 OSX 和使用 Node.js 4.2.6 的 Windows 上看到了这个问题。
【问题讨论】:
标签: node.js