如何在node.js socket.send回调中发送更多UDP数据报?

时间:2019-01-26 02:18:19

标签: node.js

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

0 个答案:

没有答案