Socket.IO leave-room事件触发次数递增问题求助
Socket.IO
leave-room事件触发次数逐次递增的问题解决 问题现象
使用Socket.IO 4.7.1时,leave-room事件的触发次数随客户端连接断开次数递增:首次断开触发1次,第二次断开触发2次,后续依次增加至3次、4次,控制台重复输出相同的"socket X left room X"日志。
问题原因
你的代码在每次新socket连接时,都给全局的io.sockets.adapter绑定一次leave-room事件监听器。io.sockets.adapter是Socket.IO的全局房间适配器,并非每个socket实例独有的对象,所以每新增一个连接,就会多一个监听器堆积在这个全局事件上。当有socket离开房间时,所有堆积的监听器都会执行,导致输出次数逐次递增。
修复代码
将leave-room的监听器移到connection事件回调外部,只绑定一次:
// 全局仅绑定一次leave-room事件监听器 io.sockets.adapter.on("leave-room", (room, id) => { console.log('socket '+ id +' left room ' + room) }); io.on("connection", (socket) => { console.log('-----') });
说明
leave-room事件是全局适配器触发的,监听所有socket的房间离开行为,只需要在服务启动时绑定一次即可,不需要每次新连接都重复绑定。这样就能避免监听器堆积,保证每次socket离开房间时只触发一次日志输出。
内容的提问来源于stack exchange,提问作者deekep
相关产品推荐
相关产品推荐

