2012-03-03 11 views
5

Czy jest możliwe przesłanie gniazda przychodzącego z aplikacji do http za pośrednictwem NodeJS?Przeniesienie gniazda UDP w node.js z aplikacji do HTTP

Wysyłam moje gniazdo za pomocą aplikacji (w języku C++) w protokole UDP lub TCP (jeśli niemożliwe w UDP ...) do NodeJS.

Mój skrypt z 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); 

Do tej pory ma taką funkcję, ale to w jaki sposób przenieść moje gniazdo do Socket.io na przykład?

Chciałbym wysłać gniazdo do Socket.io (na przykład), aby przesłać gniazdo do HTTP. Przy użyciu funkcji takich jak to na przykład, ale bez odnowienia ustanowienia połączenia socket.io:

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

dziękuje za pomoc.

++ Metra.

Odpowiedz

8

Oto pełny przykład z serwerem socket.io, serwerem sieciowym wysyłającym bardzo prostą stronę (po prostu loguje wszystkie wiadomości do konsoli) i gniazdem UDP nasłuchującym komunikatów, przekazując je do wszystkich podłączonych klientów:

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); 

Aktualizacja: Jako io.sockets.emit pokazuje wszystkie wiadomości otrzymane przez port UDP 7788 są wysyłane do wszystkich podłączonych klientów. Jeśli chcesz je trasować na podstawie niektórych danych w wiadomości lub podobnym, możesz użyć funkcji "pokoju" Socket.IO: io.sockets.of(someRoom).emit. W module obsługi połączenia dla Socket.IO możesz każdego klienta umieścić w jakimś pomieszczeniu.

+0

Hej, dziękuję, będę testować :). – Metra

+0

Jestem prawie pewna, że ​​socket.io jest opakowaniem głównie wokół WebSockets. WebSockets są oparte na TCP. http://tools.ietf.org/html/rfc6455 przeczytaj sekcję abstrakcyjną. – Kevin