gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:42:52 24 4
gpt4 key购买 nike

您能否告诉我们如何解决浏览器中所有打开的选项卡保留身份 socket.io 的问题。

示例:

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

最佳答案

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

var socketMap = {};

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

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

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

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);
});

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

var sockets = socketMap['some_user_id'];

关于node.js - 保存浏览器中所有打开的选项卡的 socket.io ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18654567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com