node.js escuta UDP e encaminha para clientes da web http conectados
Sou novo em node.js, então perdoe a ignorância se isso for simples.
O que eu quero fazer é configurar um servidor http node.js simples ao qual um cliente da web se conecta. Eu também quero que o servidor node.js atue como um ouvinte UDP em uma porta separada, na qual ele receberá cargas úteis JSON de algum outro aplicativo. Eu quero que o servidor node.js encaminhe essas cargas JSON imediatamente para um ou mais dos clientes web conectados.
Cheguei longe de um pouco de googling inicial:
Crie um servidor http node.js simples que responda com uma página html estática:
//Initialize the HTTP server on port 8080, serve the index.html page
var server = http.createServer(function(req, res) {
res.writeHead(200, {
'Content-type': 'text/html'});
res.end(fs.readFileSync(__dirname + '/index.html'));
}).listen(8080, function() {
console.log('Listening at: 127.0.0.1 8080');
}
);
Inicialize um servidor UDP em uma porta separada:
//Initialize a UDP server to listen for json payloads on port 3333
var srv = dgram.createSocket("udp4");
srv.on("message", function (msg, rinfo) {
console.log("server got: " + msg + " from " + rinfo.address + ":" + rinfo.port);
io.sockets.broadcast.emit('message', 'test');
//stream.write(msg);
//socket.broadcast.emit('message',msg);
});
srv.on("listening", function () {
var address = srv.address();
console.log("server listening " + address.address + ":" + address.port);
});
srv.bind(5555);
Use o socket.io para estabelecer uma conexão ativa entre o web client e o servidor:
//this listens for socket messages from the client and broadcasts to all other clients
var io = require('socket.io').listen(server);
io.sockets.on('connection', function (socket) {
socket.on('message', function (msg) {
console.log('Message Received: ', msg.data.skeletons[0] ? msg.data.skeletons[0].skeleton_id : '');
socket.broadcast.emit('message', msg);
}
);
});
Eu acho que o meu problema é que eu não sei como fazer a ponte 2 e 3, para obter os pacotes UDP recebidos transmitidos para os clientes socket.io conectados. Ou talvez haja uma maneira mais simples e elegante de fazer isso? Eu encontrei a documentação para socket.io estar faltando ...
EDIT: graças à pessoa que corrigiu a formatação do código