2012-03-03 37 views
5

¿Es posible transferir un socket que proviene de una aplicación a http a través de NodeJS?Transferir socket UDP en node.js desde la aplicación a HTTP

Envío mi socket con una aplicación (en C++) en UDP o TCP (si es imposible en UDP ...) a NodeJS.

Mi script de NodeJS:

var server = dgram.createSocket("udp4"); 
server.on("message", function (content, rinfo) 
{ 
    console.log("socket: " + content + " from " + rinfo.address + ":" + rinfo.port); }); 
    server.on("listening", function() { 
}); 
server.bind(7788); 

Hasta hace ahora esa función, pero entonces cómo transferir mi toma de Socket.io por ejemplo?

Me gustaría enviar el socket a Socket.io (por ejemplo) para transferir el socket a HTTP. Mediante el uso de una función como esta, por ejemplo, pero sin renovar un establecimiento de una conexión a Socket.IO:

io.sockets.on('connection', function (socket) { 
    socket.emit(content); 
}); 

Gracias por su ayuda.

++ Metra.

Respuesta

8

Aquí hay un ejemplo completo con un servidor socket.io, un servidor web que envía una página muy simple (simplemente registrará todos los mensajes en la consola) y un socket UDP escuchando mensajes, pasándolos a todos los clientes conectados:

var http = require('http'), 
    dgram = require('dgram'), 
    socketio = require('socket.io'); 

var app = http.createServer(handleRequest), 
    io = socketio.listen(app), 
    socket = dgram.createSocket('udp4'); 

socket.on('message', function(content, rinfo) { 
    console.log('got message', content, 'from', rinfo.address, rinfo.port); 
    io.sockets.emit('udp message', content.toString()); 
}); 

function handleRequest(req, res) { 
    res.writeHead(200, {'content-type': 'text/html'}); 
    res.end("<!doctype html> \ 
     <html><head> \ 
     <script src='/socket.io/socket.io.js'></script> \ 
     <script> \ 
      var socket = io.connect('localhost', {port: 8000}); \ 
      socket.on('udp message', function(message) { console.log(message) }); \ 
     </script></head></html>"); 
} 

socket.bind(7788); 
app.listen(8000); 

actualización:io.sockets.emit Como muestra, todos los mensajes recibidos en el puerto UDP 7788 se envían a todos los clientes conectados. Si desea enrutarlos basándose en algunos datos del mensaje o similar, puede usar la función "room" de Socket.IO: io.sockets.of(someRoom).emit. En el controlador de conexión para Socket.IO, puede join cada cliente en una habitación.

+0

Hola, gracias, voy a probar :). – Metra

+0

Estoy bastante seguro de que socket.io es un contenedor principalmente alrededor de WebSockets. WebSockets están basados ​​en TCP. http://tools.ietf.org/html/rfc6455 lea la sección de resumen. – Kevin

Cuestiones relacionadas