回答
io.sockets.manager.roomClients[socket.id]
在socket.io版本1+语法是:
socket.rooms
'socket.rooms'在1.3.6中显示为空......这是否仍适用于您? – Crashalot
返回'undefined',版本:1.6.0。 –
在版本中工作:1.7.3 !!! – user3655266
当使用非默认适配器,如socket.io-Redis的,socket.rooms
似乎并没有这样的伎俩。我设法为没有循环的特定客户端设置房间的方式是使用io.sockets.adapter.sids[socket.id]
,它将房间作为对象返回。
{ 'R-ZRgSf7h4wfPatcAAAC': true, ROOM: true, ROOM_2: true }
请注意,这不会列出其他进程上的套接字,但!
socket.io v1.3.7,socket.io-redis的1.0.0
1.4.5版本=>io.sockets.adapter.rooms[roomname].sockets
socket.io 1.7.3+- >
Object.keys(io.sockets.adapter.sids[socket.id])
// returns [socket.id, room-x'] || [socket.id, 'room-1', 'room-2', ...]
版本1.7.3,socket.rooms
包含socket.id
,因此将其删除,并得到房间的列表:
Object.keys(socket.rooms).filter(item => item!=socket.id);
在其他版本中,你可以打印socket
,并找到房间。
版本2.0.3
io.sockets.sockets[yourSocketID].rooms
与
socket.rooms
等于您可以保存在插座本身的房间时,它加入了一个房间
// join room
socket.join(room);
// update socket's rooms
if (socket.rooms) {
socket.rooms.push(room);
} else {
socket.rooms = [room];
}
以后可以检索所有客房该插座是由简单的
socket.rooms
作为确保插座是在只有一个房间的时间,我的解决办法是:
var currentRoom = Object.keys(io.sockets.adapter.sids[socket.id]).filter(item => item!=socket.id);
- 1. Socket.io - 2个插座
- 2. Socket.io插座手柄
- 3. Socket.io插座断开
- 4. socket.io自动断开插座
- 5. Flex插座到插座
- 6. 获得“插座挂断”使用的NodeJS/socket.io和wscat
- 7. 遍历socket.io V1所有插座
- 8. socket.io,指定插座中的用户
- 9. Socket.io PM2重装复制插座
- 10. 转移他们得到与Java插座
- 11. 大气'插座'没有得到参考
- 12. 发射到所有插座不工作Socket.io
- 13. socket.io:只有一个房间到一个插座
- 14. Socket.io发送消息到某些插座(体系结构)
- 15. socket.io发射到所有插座不工作
- 16. 获得一个插座
- 17. 需要在导轨插座中正确获得主Ember插座
- 18. 连接到插座
- 19. 插座与插座集合
- 20. Socket.io得到意外
- 21. Feathersjs:切换到插座,而不是REST,使用快递中间件与插座
- 22. 究竟是什么插座
- 23. 插座是否可靠?
- 24. POSIX插座VS网络插座VS Windows TCP/IP插座
- 25. Socket.io - 发出广播消息,除了我的插座ID
- 26. 使用socket.io计算连接插座的数量
- 27. 限制每个连接的计算机/用户插座Socket.IO
- 28. 通过socket.io向每个插座发送私人信息
- 29. Socket.IO:强制闪光灯插座,“没有可用的传输”
- 30. nodejs和socket.io聊天室
感谢,错过了意外 – Herokiller
这是正确的1+? –
'manager'在1.3.6中返回undefined ... – Crashalot