node.js - 如何在 node.js socket.send 回调中发送更多 UDP 数据报?
问题描述
如果我在自己的回调中调用 socket.send,一些 UDP 数据报永远不会出现在目的地。使用 Linux API send(3) 当没有缓冲区或有其他本地错误时,我会收到一个错误。我一直无法在节点中找到模拟。这是带有工作和失败代码路径的示例(选择大的 const 布尔值)。
const dgram = require('dgram');
const WOULD_YOU_LIKE_ME_TO_DROP_BUFFERS = true; // TOGGLE THIS
const PORT = 41234;
const GRAMS = 1000;
const FILL = '##################################################'
function sendgrams() {
let pos = 0;
const socket = dgram.createSocket('udp4');
function funkytown() {
if (pos >= GRAMS) {
socket.close((e) => {
if (e) {
console.log(e);
}
console.log('Closed.');
});
return;
}
socket.send(`${pos++} ${FILL}${FILL}${FILL}${FILL}${FILL}${FILL}${FILL}`, PORT, (e) => {
if (e) {
console.log(e);
}
if (WOULD_YOU_LIKE_ME_TO_DROP_BUFFERS) {
funkytown();
} else {
setTimeout(funkytown, 0);
}
});
}
funkytown();
}
sendgrams();
这是一个快速而肮脏的监视器,但可以随意使用其他东西:
require ('dgram')
.createSocket('udp4')
.on('message', (msg, rinfo) => {
msg = `${msg}`.split(' ')[0];
console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
})
.bind(41234);
解决方案
推荐阅读
- delta - IPFS 是否提供块级文件复制功能?
- bootstrap-4 - 如何使 select2 下拉高度与内联按钮相同?
- sparql - 独立的 blazegraph wikidata 服务器没有返回结果
- python - 如何在 Kivy 中设置应用程序的方向?
- excel - 尽管高于 lbound 且低于 ubound,但索引超出范围
- arrays - 将索引中的数组状态设置和更新为字符串
- java - 更换地图
>> 短型 - javascript - 使用引导程序验证表单,即使有一些验证表单正在提交。我应该如何避免它
- c# - 如何在一个 xaml 文件上使用单独的 C# 文件
- python - 将 pickle 文件写入 Minio 对象存储