保存浏览器中所有打开的选项卡的socket.io ID

Rom*_*tko 1 browser session node.js socket.io

socket.io对于浏览器中所有打开的选项卡,您能告诉我如何解决保留身份的问题吗?

例:

我打开了一个页面(/index例如),我将其设置为连接socket.io并获取唯一的会话ID.但是当我在另一个标签上打开同一页面时 - ID会创建另一个标签,也就是说,已经有两个具有两个不同ID的化合物.这是对的,这是合乎逻辑的.但是,我需要在所有选项卡中同时向这些ID发送消息(包括绑定到user_id),并且因为会话ID不同 - 这是不可能的.

hop*_*rim 7

如果您不想(或不能)使用某种会话存储,并希望使用相同的user_id将消息发送到多个套接字,则可以存储以user_id为键并将socket数组作为值的映射

var socketMap = {};
Run Code Online (Sandbox Code Playgroud)

并使用握手数据存储对套接字的引用

io.sockets.on('connection', function (socket) {
    var userId = socket.handshake.userId;    
    if(!socketMap[userId]) socketMap[userId] = [];
    socketMap[userId].push(socket);
});
Run Code Online (Sandbox Code Playgroud)

或者使用一些正常的事件数据

socket.on('auth', function(data) {
    var userId = data.userId;
    var authToken = data.authToken;
    ... // verify the data...
    if(!socketMap[userId]) socketMap[userId] = [];
    socketMap[userId].push(socket);
});
Run Code Online (Sandbox Code Playgroud)

当你想要一个套接字列表发送消息时

var sockets = socketMap['some_user_id'];
Run Code Online (Sandbox Code Playgroud)