【问题标题】:Node.JS WebSocket and SocketNode.JS WebSocket 和 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。将一个放入另一个不起作用。

【问题讨论】:

    标签: sockets node.js 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});
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-25
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      相关资源
      最近更新 更多