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

标签 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 数据包时重复使用客户端?您必须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/

相关文章:

Node.js:将标准输出捕获到字符串变量中的最简单方法

javascript - 如果属性未定义则跳到 else

node.js - 可以通过for循环使用express.js创建许多app.get调用吗?

c# - 为什么我的 UDP 多播没有到达网络上的机器?

java - 为什么我的数据报套接字停止接收数据,即使它接收的数据完全正常?

javascript - Mongoose 字段不是必需的但唯一的

python - 在 Python 中读取 DNS 数据包

c - 套接字编程 : sendto always fails with errno 22 (EINVAL)

java - 接收/发送数据报套接字数据

android - 如何使用 Oboe(用于 Android 的低延迟音频的 C++ 库)从 DatagramPacket 接收 byte[] 缓冲区?