2013-09-27 94 views

回答

8

從在Socket.IO Room doc

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

+0

感謝,錯過了意外 – Herokiller

+5

這是正確的1+? –

+4

'manager'在1.3.6中返回undefined ... – Crashalot

23

在socket.io版本1+語法是:

socket.rooms 
+3

'socket.rooms'在1.3.6中顯示爲空......這是否仍適用於您? – Crashalot

+1

返回'undefined',版本:1.6.0。 –

+0

在版本中工作:1.7.3 !!! – user3655266

2

當使用非默認適配器,如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

1.4.5版本=>io.sockets.adapter.rooms[roomname].sockets

3

socket.io 1.7.3+- >

Object.keys(io.sockets.adapter.sids[socket.id]) 
// returns [socket.id, room-x'] || [socket.id, 'room-1', 'room-2', ...] 
0

socket.io 1.7.3 +

var currentRoom = socket.rooms[Object.keys(socket.rooms)[0]];//returns name of room 
+0

'Object.keys'沒有排序,是嗎?我認爲這個解決方案通常不起作用。 – stholzm

+1

說實話我還沒有嘗試過它在多個插座 – filemono

+0

,當我們試圖展示房間時,它顯示套接字ID本身 – Adry

1

版本1.7.3,socket.rooms包含socket.id,因此將其刪除,並得到房間的列表:

Object.keys(socket.rooms).filter(item => item!=socket.id); 

在其他版本中,你可以打印socket,並找到房間。

0

版本2.0.3

io.sockets.sockets[yourSocketID].rooms 

socket.rooms 
0

等於您可以保存在插座本身的房間時,它加入了一個房間

// join room 
socket.join(room); 

// update socket's rooms 
if (socket.rooms) { 
    socket.rooms.push(room); 
} else { 
    socket.rooms = [room]; 
} 

以後可以檢索所有客房該插座是由簡單的

socket.rooms 
0

作爲確保插座是在只有一個房間的時間,我的解決辦法是:

var currentRoom = Object.keys(io.sockets.adapter.sids[socket.id]).filter(item => item!=socket.id);