socket.io,使用Web套接字的聊天应用程序-关闭tab1将导致tab2和tab3中的“在线用户”无效

时间:2019-01-30 13:33:33

标签: javascript node.js socket.io web-development-server

在使用网络套接字的聊天应用程序中,每当连接1个以上用户(例如{user1:tab1,user2:tab2,user2:tab3,...})时,在关闭tab1时,“在线用户”状态为其他选项卡(tab2,tab3,...)为空。
但是与此相反,即关闭除tab1以外的选项卡,通过实时更新“在线用户”状态,我的聊天应用程序可以正常工作在其他选项卡中。
我不确切知道我的代码的哪一部分出了问题,因此我提供了指向index.html和server.js的所有编码部分的链接
index.html
server.js

我正在使用nodejs版本10.15.0,快速版本6.7.0,socket.io版本6.7.0。
我希望这些信息会足够。

1 个答案:

答案 0 :(得分:1)

我相信错误在这里:

users.splice(users.indexOf(socket.username))

来自Array.splice documentation

  

array.splice(start [,deleteCount])

     

如果省略了deleteCount [...],则从头开始的所有元素   通过数组的末尾将被删除。

因此,当第一个用户断开连接时,请从阵列中删除他们和所有以下所有用户

我的猜测是您应该这样写:

users.splice(users.indexOf(socket.username), 1)

一次仅删除一个用户。