我在使用 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 。
更新: 当您保存 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/