Nodejs 中基于 UDP 的客户端

UDP based clients in Nodejs

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

Multi threading isn't possible in Nodejs

这是不对的。没错,我们在 nodejs 中的主事件循环只是单线程的,但是每当使用回调函数调用异步函数时,您就会有一个额外的线程,运行 是 I/O 网络的东西。如果完成,您的回调方法将被调用并返回到主事件循环(简单地说)。因此,由于 client.send 是异步的,因此创建多个 UDP 客户端并让它们触发并向 UPD 服务器施加压力应该没有问题。要并行 运行 它们,您可以使用模块 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();
});