The docs (以及我看过的许多库)似乎表明您每次发送时都关闭客户端:
var dgram = require('dgram');
var message = new Buffer("Some bytes");
var client = dgram.createSocket("udp4");
client.send(message, 0, message.length, 41234, "localhost", function(err, bytes) {
client.close();
});
说实话,我对 UDP 的内部工作原理了解不多,但是什么会阻止您每次想要发送 UDP 数据包时重复使用客户端
?您必须close()
它吗?
我已经在localhost
上测试了它(即重用客户端),并且它可以很好地发送多个数据包(至少到同一个目的地),但这还不足以测试向我保证,在广阔的世界里一切都会好起来的。
The source of send()调用 _startReceiving()
函数,该函数“绑定(bind)到随机端口”,然后“开始接收” - 但我不清楚这里应该接收什么,因为我们实际上是在发送。无论如何,这足以让我认为留住客户可能存在问题......我只是不确定它们是什么。
最佳答案
您可以为多个请求重复使用 udp 套接字。例如,在多个测试中也可以看到这种行为: https://github.com/joyent/node/blob/master/test/simple/test-dgram-pingpong.js
udp套接字绑定(bind)到一个随机端口,因为它必须用端口指定源地址。
关于node.js - 您必须在 Node.js 中关闭 UDP (dgram) 客户端还是可以重用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11081189/