socket.io获取socket当前所在的房间

Her*_*ler 19 websocket node.js socket.io

是否有可能获得插座当前所在的房间,而无需打电话

io.sockets.clients(roomName)
Run Code Online (Sandbox Code Playgroud)

为每个房间名称并在结果中查找此套接字

Arj*_*jen 29

在socket.io版本1+中,语法为:

socket.rooms
Run Code Online (Sandbox Code Playgroud)

  • `socket.rooms`在1.3.6中显示空白...这对你有用吗? (4认同)
  • 返回 `undefined`,版本:1.6.0。 (3认同)
  • 对我来说,它返回一个空白对象 `{}`,我使用的是 2.3.0 (2认同)

Lau*_*rin 9

来自Socket.IO Room doc:

io.sockets.manager.roomClients[socket.id]


Ale*_*urt 6

socket.io 1.7.3+ - >

var rooms = Object.keys(io.sockets.adapter.sids[socket.id]);
// returns [socket.id, 'room-x'] or [socket.id, 'room-1', 'room-2', ..., 'room-x']
Run Code Online (Sandbox Code Playgroud)


t_d*_*m93 6

更新:Socket.io 3.0 发布


使用3.xSocket.rooms is Setnow,这意味着房间中的值可能只出现一次

结构示例: Set(4) {"<socket ID>", "room1", "room2", "room3"}

io.on("connect", (socket) => {
  console.log(socket.rooms); // Set { <socket.id> }
  socket.join("room1");
  console.log(socket.rooms); // Set { <socket.id>, "room1" }
});
Run Code Online (Sandbox Code Playgroud)

要检查特定房间:

socket.rooms.has("room1"); // true
Run Code Online (Sandbox Code Playgroud)

有关 Set 和可用方法的更多信息:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set

迁移文档:https : //socket.io/docs/migrating-from-2-x-to-3-0/