Node.JS WebSocket 和 Socket
Posted
技术标签:
【中文标题】Node.JS WebSocket 和 Socket【英文标题】:Node.JS WebSocket and Socket 【发布时间】:2011-10-07 20:36:07 【问题描述】:我想混合普通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。将一个放入另一个不起作用。
【问题讨论】:
【参考方案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);
);
【讨论】:
这是将所有套接字保存为数组然后循环遍历它们的唯一解决方案吗?性能怎么样? 在出现问题之前不要担心性能。编程的黄金法则。【参考方案2】:您可以使用 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);
【讨论】:
以上是关于Node.JS WebSocket 和 Socket的主要内容,如果未能解决你的问题,请参考以下文章
为啥选择 XMPP 而 Node.js 和 WebSocket 都可用? [关闭]
WebSocket 错误,意外响应代码:200 与 Nginx 和 Node.js
url 路径中带有通配符的 Node.js 和 Websocket