框架:websocket+nodejs
功能:人工服务,用户连接人工,将本用户与人工特有的用户进行加好友,然后可以进行聊天。如果用户有人工的好友,则推送数据。 断开:删除好友,将本用户与人工用户生成的房间号从聊天室移除(只断开本用户与人工的连接,不影响本用户与其他用户的聊天)
问题:第一次连接人工,推送数据正常,断开。之后,在第一次基础上,不刷新浏览器,再次连接本用户与人工用户,向本用户推送的数据随着次数递增,数据推送异常。
声明:每次连接本用户与人工,后端连接人工推送的数据只推送了一次(已经调试过),但是前端接受数据除了第一次,其他都是已成,推送了很多次。断开本用户与人工的连接用的client.leave(roomId);roomId是本用户与人工用户生成的在聊天室内的房间名。
console.log('给用户推荐菜单成功')
let jsoMmenuResult =data;//推送的数据
let menuResult=JSON.parse(jsoMmenuResult)//转对象
if(menuResult.code==200 && menuResult.success==true){
this.server.to(data.userId).emit('onItsupportMenu',{ code:RCode.OK, msg:'给用户推荐菜单成功200', data: jsoMmenuResult})
}else{
const tocken=await tockenMetod.gainTocken()
tockenMetod.tocken =tocken;
jsoMmenuResult=await menuseats.display(tocken);
this.server.to(data.userId).emit('onItsupportMenu',{ code:RCode.OK, msg:'给用户推荐菜单成功!!200', data: jsoMmenuResult});
}
无报错
前后端已经调试过,怀疑是没有彻底断开本用户与人工用户的连接,或者socket的缓存没清除
可能是没有关闭websocket连接导致的,在窗口事件onbeforeunload中关闭连接。
建议你检查一下前端代码,确认是否有重复监听数据推送事件的代码,或者是否有多余的连接代码未断开,导致重复接收数据。另外,检查一下 client.leave(roomId) 方法是否正确执行,确保断开连接后,房间内的所有用户都已经离开。