Node.js: recebendo muitas mensagens UDP por vez, perdendo-as
Meu servidor de nó recebe cerca de400 mensagens UDP em um segundo e tudotrabalho, e sou capaz de processar todos os 400 deles.
No entanto, quando começo a receber cerca de700 mensagens UDP em um segundoEu perco 2-20 das mensagens e elas nunca são analisadas :(
Eu pensei em algunsopções aqui:
Crie uma fila de todas as mensagens de soquete, consuma uma por uma, embora não tenha certeza de como implementar issoNão consigo descobrir como implementarEncontre umconfiguração noNó / Express / dgram onde eu posso aumentar o tamanho da memória / tamanho do buffer, algo assimNão consegui encontrar configurações como essa :(Use um receptor UDP diferente, pare de usar a construção do nó no receptor UDP de soqueteNão encontrou outros receptoresAqui está a aparência do meu remetente UDP:
var dgram = require("dgram");
var udpserver = dgram.createSocket("udp4");
var seatStateStore = require("./SeatStateStore");
udpserver.on("message",
function (msg, rinfo)
{
seatStateStore.parseMessage(msg.toString());
});
Alguém tem alguma ideia? Não consegui descobrir nenhuma das três opções: / Alguém pode me ajudar?
Nó v0.10.29
Express v3.14.0
===============================
ATUALIZAÇÃO / SOLUÇÃOAqui está o código que acabei usando (a solução do @RoyHB ligeiramente modificada):
var dgram = require("dgram");
var udpserver = dgram.createSocket("udp4");
var seatStateStore = require("./SeatStateStore");
var Dequeue = require('dequeue');
var FIFO = new Dequeue();
fetcher();
udpserver.on("message",
function (msg, rinfo)
{
FIFO.push(msg.toString());
});
udpserver.bind(43278);
function fetcher () {
while (FIFO.length > 0)
{
var msg = FIFO.shift();
seatStateStore.parseMessage(msg);
}
setImmediate(fetcher); //make this function continuously run
}