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数据包时,只会重复使用client
会阻止你做什么?你 到close()
吗?
我在localhost
上测试了它(也就是说,重用了客户端),并且它发送了多个数据包(至少到同一目的地),但这并不足以让我确信在广阔的世界里,它会好的。
The source of send()调用一个_startReceiving()
函数,它“绑定到一个随机端口”,然后“开始接收” - 但我不清楚这里应该接收什么,因为我们是实际发送。在任何情况下,这足以让我认为可能存在让客户留下来的问题......我只是不确定它们是什么。
答案 0 :(得分:1)
您可以将udp套接字重用于多个请求。例如,在多个测试中也可以看到此行为: https://github.com/joyent/node/blob/master/test/simple/test-dgram-pingpong.js
udp套接字绑定到随机端口,因为它必须使用端口指定源地址。
答案 1 :(得分:0)
在3种情况下,您需要关闭UDP套接字:
same
本地端口的另一个套接字,从而避免出现port in use
问题。