3

文档(以及我查看过的许多库)似乎表明您每次发送时都会关闭客户端:

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 的内部工作原理了解不多,但是client每次要发送 UDP 数据包时,什么会阻止您重用呢?你必须这样做close()吗?

我已经对其进行了测试localhost(即重用客户端),它可以很好地发送多个数据包(至少到同一个目的地),但这还不足以让我确信它在大范围内是可以的外面的世界。

send() 的源调用一个_startReceiving()函数,该函数“绑定到一个随机端口”,然后“开始接收”——但我不清楚这里应该接收什么,因为我们实际上是在发送。无论如何,这足以让我认为留住客户可能存在问题……我只是不确定它们是什么。

4

2 回答 2

1

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

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

于 2012-06-18T12:06:30.163 回答
1

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

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