Nodejs中基于UDP的客户端

时间:2016-08-23 07:55:21

标签: node.js multithreading udp

我有一台服务器(在Nodejs中开发)与UDP上的100个远程设备通信。我想对它进行基准测试。为此,我需要创建几个每秒与服务器通信的UDP客户端。由于Nodejs中无法实现多线程,所以我该如何实现呢?任何人都可以给我一些解决方案。

1 个答案:

答案 0 :(得分:0)

  

Nodejs中无法进行多线程

这是不对的。我们在nodejs中的主事件循环只是单线程是正确的,但是每当使用回调函数调用异步函数时,你都有一个运行该I / O网络内容的附加线程。如果这个完成,你的回调方法将被调用,并返回主事件循环(简单地说)。因此,要创建多个UDP客户端并让它们解决并强调UPD服务器应该没问题,因为client.send是异步的。要并行运行它们,您可以使用模块async

const dgram = require('dgram');
const async = require('async');

async.parallel([
    function(callback) {
        var client1 = dgram.createSocket('udp4');
        client1.send("hello", 41234, 'localhost', function(err) {
          client1.close();
          callback();
        });
    },
    function(callback) {
        var client2 = dgram.createSocket('udp4');
        client2.send("world", 41234, 'localhost', function(err) {
          client2.close();
          callback();
        });
    }
],
// optional callback
function(err, results) {
  // I am done here...
  process.exit();
});

或者你可以这样做

const dgram = require('dgram');
var client1 = dgram.createSocket('udp4');
var client2 = dgram.createSocket('udp4');

// This also runs in parallel
client1.send("hello", 41234, 'localhost', function(err) {
    client1.close();
});
client2.send("world", 41234, 'localhost', function(err) {
    client2.close();
});