[英]Sending UDP messages from multiple worker processes
在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();
}
我在OSX的Node.js 5.1.0和Windows的Node.js 4.2.6上看到了此問題。
此行為可能來自netcat
。 引用此答案 :
當nc正在偵聽UDP套接字時,它將“鎖定”到它收到的第一個數據包的源端口和源IP。
如果您以不同的方式收聽消息,則應該全部看到它們。 例如:
require('dgram').createSocket('udp4')
.bind(8111)
.on('message', function (buf) { console.log(buf.toString()); });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.