手机浏览器标签页中websocket无法触发close事件,仍旧在后台连接着。请问是否有好的处理办法?

daming

手机浏览器测试发现在当前标签页打开新聊天室或者刷新等操作,本来是应该退出之前的聊天室,进入新的聊天室,可是现在是发现无法触发close事件,导致当前标签页不仅连接着现在新的聊天室,还连接着老的聊天室,导致老的聊天室一直有该用户(但实际上用户手机端收不到这个老的本该关闭的聊天室的消息了,只是在当前标签页,后台还连接着这个老的聊天室。)
不过关闭手机浏览器该标签页或者退出手机浏览器,可以正常触发close事件,并且服务器端会移除该用户
请问是否有人遇到过这个问题,还请指点一下,谢谢了~
另外,手机标签页用 target=_blank 无法打开新标签页,导致切换聊天室只能在当前标签页了,也就测试发现了上述的问题(想实现多个标签页多个聊天室的功能),请问是否有好的处理办法呢,谢谢~

2736 1 0
1个回答

zyxjason

客户端连上websocket服务器之后,会分给客户端一个client_id. 当你刷新后,再次连接上websocket服务时,会新分配一个client_id,这两个client_id不一样

那可以这样做: 每个用户去链接websocket时,带上一个user_id,在服务器端维护一个在线用户列表(存储用户ID和client_id对应关系), 然后遍历在线列表,会发现client_id变了,那在服务器端把老的client_id踢掉就行了

  • 暂无评论
年代过于久远,无法发表回答
🔝