Node.JS WebSocket和Socket

我想混合两个普通套接字和WebSocket。 所有收到的套接字消息应通过websocket广播给所有连接的用户。

我有这部分代码:

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。 把一个人放在其他地方是行不通的。

尝试保留一组连接的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); }); 

您可以使用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}); }