繁体   English   中英

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

[英]How can I establish one connection between a user and the WebSocket?

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

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

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

这是逻辑执行顺序

  1. 用户连接到WebSocket。
  2. 用户将json字符串发送到WebSocket。
  3. WebSocket对接收到的消息进行处理。
  4. WebSocket最终将新消息发送到用户打开的所有选项卡

新消息应仅返回给该用户,而不能返回给其他用户。

如何在用户和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);
    }
}

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

我不知道cookie(没有使用过cookie),但是在JavaScript级别上,一种方法是在本地存储中存储本地生成的随机ID(具有足够的长度,因此您不必担心冲突)在浏览器中,并将其作为初始消息的一部分在WebSocket级别进行传输。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM