2012-03-26 27 views
10

Gdy ktoś łączy się z serwerem węzła, przechowuję tablicę ze wszystkimi gniazdami. W ten sposób mogę wysyłać wiadomości do wszystkich, ilekroć jest to potrzebne, lub przeglądać użytkowników, aby policzyć liczbę użytkowników online itp.node.js nie wysyła gniazda po zdarzeniu rozłączenia

Wszystko to działa dobrze, ale gdy zdarzenie on disconnect jest uruchamiane, nie otrzymuję gniazdo w moich argumentach. Czy istnieje inny sposób sprawdzenia, które gniazdo zostało odłączone?

var allClients = []; 

io.sockets.on('connection', function(socket) { 
    allClients.push(socket); 

    socket.on('disconnect', function(socket) { 
     console.log('Got disconnect!'); 

     var i = allClients.indexOf(socket); 
     delete allClients[i]; 
    }); 
}); 

Oczywiście powyższy przykład nie działa, ponieważ zdarzenie disconnect nie daje argumentu socket (ani żadnego innego argumentu). Czy jest też inne zdarzenie, które zostało wywołane przed rozłączeniem, gdy gniazdo nadal tam jest?

Ali

Odpowiedz

22

Masz już gniazdo, ponieważ obsługi rozłączanie jest zadeklarowana w „połączenie” zakres zdarzeń. Spróbuj usunąć parametr, który przekazujesz do obsługi "rozłącz", powinieneś być w stanie pracować z parametrem socket z programu obsługi połączenia.

io.sockets.on('connection', function(socket) { 
    allClients.push(socket); 

    socket.on('disconnect', function() { 
     console.log('Got disconnect!'); 

     var i = allClients.indexOf(socket); 
     delete allClients[i]; 
    }); 
}); 

Poza tym nie trzeba tablicę gniazdo do transmisji, można użyć Pokoje do gniazd grupowych i transmisji do wszystkich gniazd wewnątrz tego pomieszczenia.

+0

jeśli muszę wysłać dane od klienta do serwera, jak to, co zrobił w 1. nie będzie działać żadne rozwiązanie? –