2011-11-04 8 views
6

Poszukuję wszystkich obiektów gniazd z io.sockets i iteracyjne nad każdym z nich.Odzyskiwanie wszystkich obiektów gniazda w io.socket

Coś jak:

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

Albo robię to źle lub I musi być brakuje czegoś. Myśli?

+0

Jaki jest problem lub pytanie? – thejh

+0

Dlaczego to czujesz? –

+0

Jestem tylko ciekawy, jaki byłby tego przypadek? – alessioalex

Odpowiedz

14

Oficjalna metoda jest:

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

Albo przez filtr pokoi:

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

to zaleca nad sugestią powyżej jako socket.io jest wewnętrzna struktura danych zawsze może ulec zmianie i potencjalnie zerwanie całego kodu z przyszłymi aktualizacjami. Znacznie mniej ryzykujesz, używając tej metody official.

+2

To moja jedyna skarga na inaczej fantastyczny Socket.io: chociaż jest mnóstwo przykładów (http://socket.io/#how-to-use), nie ma zwięzłej dokumentacji API, co pozwala mi odgadnąć moją drogę do mojej pierwszej sugestii. – josh3736

+0

To jest dokładnie to, czego szukałem. Dziękuję Ci. –

+1

josh3736 tak dokumentacja jest trochę obolały atm miejscu. prawdopodobnie powinniśmy uruchomić narzędzie JSDoc na naszym kodzie, aby stworzyć małą dokumentację API. – 3rdEden

2

To może być lub nie być 'udokumentowane', ale działa:

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

Zastosowanie io.sockets.clients():

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

Można użyć doskonałą node-inspector dołączyć do listy aplikację i sprawdź zawartość s.

+0

To jest dokładnie to, czego potrzebowałem. Sprawdzanie io.sockets uczyniło to dla mnie oczywistym. Zdaję sobie sprawę, że moje pytanie nie było jasne, dzięki za odpowiedź. –

Powiązane problemy