如果我从其自己的回调中调用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);