You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:42:10