2011-11-04 21 views
6

Estoy tratando de obtener todos los objetos socket individuales de io.sockets e iterar sobre cada uno de ellos.Recuperando todos los objetos socket en io.socket

Algo así como:

for (socket in io.sockets.something()) { 
    // do something with each socket 
} 

O yo estoy haciendo esto mal o que debe estar pasando algo. ¿Pensamientos?

+0

Entonces, ¿cuál es el problema o la pregunta? – thejh

+0

¿Por qué sientes eso? –

+0

Solo tengo curiosidad, ¿cuál sería el caso de uso para esto? – alessioalex

Respuesta

14

El método oficial es:

io.sockets.clients().forEach(function (socket) { .. }); 

o filtro por habitaciones:

io.sockets.clients('roomname') .. same as above .. 

Esto se recomienda sobre la sugerencia anterior como es socket.io estructura de datos interna siempre podrían estar sujetos a cambios y potencialmente rompiendo todo tu código con futuras actualizaciones. Corre mucho menos en riesgo cuando usa este método official.

+2

Esta es mi única queja sobre el otro tanto fantástico Socket.io: aunque hay muchos [ejemplos] (http://socket.io/#how-to-use), no hay documentación concisa de la API, dejándome adivinar mi camino a mi primera sugerencia – josh3736

+0

Esto es exactamente lo que estaba buscando. Gracias. –

+1

josh3736 sí, la documentación es un poco molesto. probablemente deberíamos ejecutar una herramienta JSDoc sobre nuestro código para crear una pequeña documentación API. – 3rdEden

2

Esto puede o no puede ser 'documentado', pero funciona:

for (var id in io.sockets.sockets) { 
    var s = io.sockets.sockets[id]; 
    if (!s.disconnected) { 
     // ... 
     // for example, s.emit('event', { ... }); 
    } 
} 

Uso io.sockets.clients():

io.sockets.clients().forEach(function(s) { 
    // ... 
    // for example, s.emit('event', { ... }); 
}); 

Usted puede utilizar el excelente node-inspector adjuntar a su aplicación e inspeccionar los contenidos de s.

+0

Esto es exactamente lo que necesitaba. Inspeccionar io.sockets me lo hizo obvio. Me doy cuenta de que mi pregunta no estaba clara, gracias por responder. –

Cuestiones relacionadas