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

如何获取指定房间内所有用户的Socket ID?

获取房间内所有用户Socket ID的解决方案
  • 原代码失效原因:你使用的是Socket.IO 2.x及更早版本的回调式API,在3.x+版本中该API已被移除,改用Promise风格调用,这是代码运行失败的核心原因。

  • Socket.IO 3.x+版本解决方案:
    采用异步方式获取,示例代码如下:

    // 在异步函数内调用
    async function getRoomClientIds(room) {
      try {
        // allSockets() 返回包含房间内所有Socket ID的Set集合
        const clientsSet = await io.in(room).allSockets();
        // 转为数组方便后续处理
        const clientIds = Array.from(clientsSet);
        console.log('房间内Socket ID列表:', clientIds);
        return clientIds;
      } catch (err) {
        console.error('获取房间客户端失败:', err);
      }
    }
    
  • Socket.IO 2.x版本排查与修复:
    若仍在使用旧版本,先确认io对象初始化正确、room参数为有效字符串,同时补充错误处理:

    io.in(room).clients((err, clients) => {
      if (err) {
        console.error('获取客户端出错:', err);
        return;
      }
      console.log('房间内Socket ID列表:', clients);
    });
    

额外注意点:

  • 确认房间名称无拼写错误,且目标用户已成功加入该房间
  • Socket.IO中每个连接的Socket默认会加入以自身ID命名的房间,注意区分自定义房间与默认房间

内容的提问来源于stack exchange,提问作者Ritesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:21:12