如何在用户和WebSocket之间建立一个连接?

时间:2015-09-14 20:09:11

标签: javascript json node.js websocket socket.io

我在节点/ Express服务器上运行了websocket。

我需要在websocket和客户端之间发送json字符串和第四。

但是,如果用户打开多个浏览器选项卡,我希望websocket服务器知道这是已连接的用户。

这是逻辑执行顺序

  1. 用户连接到WebSocket。
  2. 用户将json字符串发送到WebSocket。
  3. WebSocket对收到的消息做了一些事情。
  4. WebSocket最终将新邮件发送给用户已打开的所有标签
  5. 新邮件只应返回给该用户而不是其他用户。

    如何在用户和WebSocket之间建立一个连接?

    这是我的服务器设置

    var env = require('./config');
    
    var app = require('express')();
    var server = require('http').Server(app);
    
    var io = require('socket.io')(server);
    var clients = [];
    
    server.listen(env.socket.port, env.socket.host, function () {
      var host = server.address().address;
      var port = server.address().port;
    
      console.log('Websocket running at http://%s:%s', host, port);
    });
    
    app.get('/', function (req, res) {
        res.send('Welcome!');
    });
    
    io.on('connection', function (socket) {
    
        clients[] = socket;
    
        socket.emit('chat', { hello: 'world' });
    
        socket.on('chat', function(msg){
            console.log('message: ' + msg);
            sendAll(msg);
        });
    
    });
    
    function sendAll (message) {
        for (var i=0; i< clients.length; i++) {
            clients[i].send("Message For All: " + message);
        }
    }
    

1 个答案:

答案 0 :(得分:0)

如果您没有为用户进行身份验证,那么您需要一些特定于浏览器的数据来关联后端上的用户。

我不了解cookies(没有使用过它们),但JavaScript级别的一种方法是存储本地生成的随机ID(足够的长度以便你不要在浏览器的本地存储中必须担心冲突,并将其作为WebSocket级别的初始消息的一部分进行传输。