2011-10-07 78 views
1

我想混合兩個普通套接字和WebSocket流。所有收到的套接字消息應通過websocket廣播給所有連接的用戶。Node.JS WebSocket和Socket

我有這部分代碼:

var net = require('net'); 
var io = require('socket.io').listen(13673, 'localhost'); 

net.createServer(function (stream) { 
    stream.setEncoding('utf8'); 
    stream.on('data', function (data) { 
    // HERE SHOULD BE WS BROADCAST 
    console.log(data); 
    }); 
}).listen(24768); 

io.sockets.on('connection', function (socket) { 
    socket.on('message', function (text) { 
    var message = { 
     'type': 'message', 
     'received': new Date(), 
     'text': text 
    }; 

    socket.broadcast.json.send([message]); 
    socket.json.send([message]); 
    }); 
}); 

所以,除了它工作得很好,但我想聽聽普通插座所有的時間和過程中收到消息的WebSocket。把一個放入其他不起作用。

回答

1

儘量保持連接的WebSocket客戶的數組,當你收到TCP套接字消息,遍歷數組和廣播到每個客戶端:

var net = require('net'); 
var io = require('socket.io').listen(13673, 'localhost'); 

var clients = []; 

net.createServer(function (stream) { 
    stream.setEncoding('utf8'); 
    stream.on('data', function (data) { 
     // HERE SHOULD BE WS BROADCAST 
     for(var i = 0; i < clients.length; i++) 
      clients[i].json.send(/*your message*/); 
     console.log(data); 
    }); 
}).listen(24768); 

io.sockets.on('connection', function (socket) { 
    clients.push(socket); 
}); 
+0

連接插座這是保持所有插座作爲唯一的解決辦法數組,然後通過它們循環?性能如何? –

+0

在出現問題之前不要擔心性能問題。編程的黃金法則。 –

0

您可以使用io.sockets.emit功能廣播通過socket.io

var express = require('express') 
     , app = express() 
     , server = require('http').createServer(app) 
     , io = require('socket.io').listen(server); 

server.listen(80); 

io.sockets.on('connection', function (socket) { 
    console.log("NEW SOCKET"); 
}); 

function sendToBrowser(message){ 
    io.sockets.emit('news', {data: message}); 
}