Передача сокета UDP в файле node.js из приложения в HTTP - PullRequest
5 голосов
/ 03 марта 2012

Можно ли перенести сокет из приложения в http через NodeJS?

Я отправляю свой сокет с приложением (на c ++) в UDP или TCP (если невозможно в UDP ...) на NodeJS.

Мой скрипт от 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);

До сих пор это работает, но как перенести мой сокет в Socket.io, например?

Я хотел бы отправить сокет в Socket.io (например) для передачи сокета в HTTP. Например, с помощью такой функции, но без возобновления установления соединения с socket.io:

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

Спасибо за вашу помощь.

++ Метра.

1 Ответ

8 голосов
/ 03 марта 2012

Вот полный пример с сервером socket.io, веб-сервером, отправляющим очень простую страницу (она будет просто записывать все сообщения на консоль) и UDP-сокетом, который прослушивает сообщения и передает их всем подключенным клиентам:

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

Обновление: Как показывает io.sockets.emit, все сообщения, полученные через UDP-порт 7788, отправляются всем подключенным клиентам.Если вы хотите направить их на основе некоторых данных в сообщении или аналогичных, вы можете использовать функцию "room" в Socket.IO: io.sockets.of(someRoom).emit.В обработчике соединения для Socket.IO вы можете join каждого клиента в какую-то комнату.

...