您是否必须关闭Node.js中的UDP(dgram)客户端,还是可以重用它?

时间:2012-06-18 10:43:25

标签: node.js udp datagram

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()函数,它“绑定到一个随机端口”,然后“开始接收” - 但我不清楚这里应该接收什么,因为我们是实际发送。在任何情况下,这足以让我认为可能存在让客户留下来的问题......我只是不确定它们是什么。

2 个答案:

答案 0 :(得分:1)

您可以将udp套接字重用于多个请求。例如,在多个测试中也可以看到此行为: https://github.com/joyent/node/blob/master/test/simple/test-dgram-pingpong.js

udp套接字绑定到随机端口,因为它必须使用端口指定源地址。

答案 1 :(得分:0)

在3种情况下,您需要关闭UDP套接字:

  1. 您将创建绑定到same本地端口的另一个套接字,从而避免出现port in use问题。
  2. 您的对等方正在使用您的本地端口进行响应,而您不再希望这些响应。
  3. 您的对等方正在使用您的本地端口作为标识符,并且您不再希望与之关联。