javascript - 在 socket.io 中管理多个选项卡(但同一用户)

标签 javascript node.js session socket.io

我在使用 socket.io 时遇到了一些问题,我不知道如何解决它。我有一个带有 socket.io 登录系统的应用程序来管理用户交互。我还有一个数组来管理所有事件的 websocket session 。该数组存储一对 session.id => 用户名。

当用户打开具有相同页面(或使用 websocket 的不同页面)的新选项卡时,问题就开始了。这会导致数组中出现重复的用户名条目。

{id1, username}
{id2, username}

socket向用户发送消息时,只发送给数组的第一个 session id,所以只有一个tab接收消息。

我尝试更改新连接的套接字 id 以匹配另一个,但它不起作用。

socket.id = sessionId of the other websocket;

我认为另一种解决方案是将消息发送到所有打开的 session ,但我认为这不是最好的方法。

谢谢。

最佳答案

听起来您可能指的是问题中的套接字 ID,而不是 session ID。如果您有一个快速 session ,您可以使用 session ID,无论打开多少个选项卡,只要它们使用相同的浏览器并且它不是处于“私有(private)”模式,它都是相同的。看看这个问题,了解如何在 socket.io 中启用 session 。

socket.io and session?

更新: 当您保存 session ID 时,您会将其与用户的昵称和连接的套接字相关联。然后您可以遍历每个套接字并发送消息。类似于以下内容:

[
    {sessionId: '12345', nickname: 'timmay!', socketIds: [1, 2, 3]},
    {sessionId: '23456', nickname: 'pete', socketIds: [4, 5, 6]}
]

当另一个连接建立时,你将新的套接字 ID 推送到 socketIds 数组中,当用户断开连接时,你删除该 ID。

另一种选择可能是每个 session 只允许每个用户使用一个选项卡。您可以存储单个 socketId,当新的套接字为同一用户连接时,您可以断开原始套接字并使用新的。

关于javascript - 在 socket.io 中管理多个选项卡(但同一用户),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12166187/

相关文章:

javascript - 在 handsontable 中按下按钮不会触发事件

JavaScript 正则表达式仅捕获最后一组出现的情况

javascript - PhoneGap Android 应用程序中的页面不刷新

javascript - Mongodb findOne 但首先检查请求是否为空

ruby-on-rails - Rails 应用程序中的 guest 用户功能,在 session 中设计 + 存储

php - 在 PHP 中存储全局数据的最佳实践?

php - 几分钟后如何销毁 session

javascript - 使用 PHP 在升序和降序日期之间切换 onclick

node.js - 在数组内的 mongodb 和 nodejs 中不区分大小写的搜索

node.js - 无法在 Node webkit 应用程序中运行 node.js 模块 mdns