2011-08-29 9 views
5

Zajmuję się tworzeniem aplikacji, w której klienci łączą się z serwerem nodejs za pośrednictwem Socket.io i subskrybują różne zdarzenia. Te subskrypcje są dość złożone i nie można ich obsługiwać za pomocą funkcji kanału Socket.IO.Jak symulować awarię połączenia w Socket.IO

Oznacza to, że klient musi śledzić swoje subskrypcje i może być zmuszony do ponownej subskrypcji po rozłączeniu. Niestety, nie jestem do końca pewien, jak Socket.IO radzi sobie z ponownym połączeniem i jak dokładnie jest to przejrzyste dla klienta.

Oto pytanie: jak mogę zasymulować awarię połączenia i wymusić ponowne połączenie Socket.IO?

+3

Odłączyć kabel Ethernet i podłączyć ponownie? – xavierm02

+0

A może po prostu usuń połączenie po obu stronach nie zamykając go wcześniej, aby zobaczyć, jak reaguje druga strona. – xavierm02

+0

@ xavierm02: To by działało, ale tak naprawdę nie jest to podejście, które chciałbyś zastosować w testach jednostkowych :-) A jak "po prostu usunąć" połączenie? – n3rd

Odpowiedz

-1

Z mojego doświadczenia, uważam, że jest to najprostszy i użyteczne rozwiązanie:

po stronie klienta:

// the next 3 functions will be fired automatically on a disconnect. 
// the disconnect (the first function) is not required, but you know, 
// you can use it make some other good stuff. 

socket.on("disconnect", function() { 
    console.log("Disconnected"); 
}); 

socket.on("reconnect", function() { 
    // do not rejoin from here, since the socket.id token and/or rooms are still 
    // not available. 
    console.log("Reconnecting"); 
}); 

socket.on("connect", function() { 
    // thats the key line, now register to the room you want. 
    // info about the required rooms (if its not as simple as my 
    // example) could easily be reached via a DB connection. It worth it. 
    socket.emit("registerToRoom", $scope.user.phone); 
}); 

po stronie serwera:

io.on('connection', function(socket){ 
    socket.on("registerToRoom", function(userPhone) { 
    socket.join(userPhone); 
    }); 
}); 

I to wszystko. Bardzo proste i proste.

Możesz również dodać w podłączonym gnieździe (ostatnia funkcja) kolejne aktualizacje wyświetlacza użytkownika, takie jak odświeżenie indeksu lub coś innego.

Powiązane problemy