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();
});
我有一台服务器(用 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();
});