回答
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