簡體   English   中英

從多個工作進程發送UDP消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM