我在使用 socket.io 时遇到了一些问题,我不知道如何解决它。我有一个带有登录系统的应用程序,带有 socket.io 来管理用户交互。我还有一个数组来管理所有活动的 websocket 会话。该数组存储一对 session.id => 用户名。
当用户打开具有相同页面(或使用 websocket 的不同页面)的新选项卡时,问题就开始了。这会导致数组中出现重复的用户名条目。
{id1, username}
{id2, username}
当套接字向用户发送消息时,它仅发送到数组的第一个会话 ID,因此只有一个选项卡接收该消息。
我尝试更改新连接的套接字 ID 以匹配另一个连接,但它不起作用。
socket.id = sessionId of the other websocket;
我认为另一个解决方案是将消息发送到所有打开的会话,但我认为这不是最好的方法。
Thanks.
听起来您可能指的是问题中的套接字 ID,而不是会话 ID。如果您有快速会话,则可以使用会话 ID,无论打开多少个选项卡,只要它们使用相同的浏览器并且不处于“私有”模式,会话 ID 都是相同的。看一下这个问题,了解如何在 socket.io 中启用会话。
socket.io 和会话? https://stackoverflow.com/questions/4641053/socket-io-and-session/6171798
Update:当您保存会话 ID 时,您会将其与用户的昵称和连接的套接字关联起来。然后您可以遍历每个套接字并发送消息。像下面这样:
[
{sessionId: '12345', nickname: 'timmay!', socketIds: [1, 2, 3]},
{sessionId: '23456', nickname: 'pete', socketIds: [4, 5, 6]}
]
当建立另一个连接时,您将新的套接字 id 推送到 socketIds 数组中,当用户断开连接时,您将删除该 id。
另一种选择可能是每个会话仅允许每个用户一个选项卡。您可以存储单个套接字 ID,当同一用户连接新套接字时,您可以断开原始套接字并使用新套接字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)