2011-08-15 22 views

Odpowiedz

52

Bicie serca to mała wiadomość wysyłana z klienta do serwera (lub z serwera do klienta iz powrotem do serwera) w okresowych odstępach czasu w celu potwierdzenia, że ​​klient jest nadal aktywny.

Na przykład, jeśli masz aplikację Node.js obsługującą pokój rozmów, a użytkownik nic nie mówi przez wiele minut, nie ma sposobu, aby stwierdzić, czy nadal są podłączeni. Przesyłając sygnał dźwiękowy w ustalonym odstępie czasu (powiedzmy co 15 sekund), klient informuje serwer, że nadal tam jest. Jeśli to był np. 20 sekund od momentu, gdy serwer uzyskał bicie serca od klienta, prawdopodobnie został rozłączony.

Jest to konieczne, ponieważ: cannot be guaranteed a clean connection termination over TCP - jeśli klient ulegnie awarii, lub coś innego się stanie, nie otrzymasz pakietów terminacji od klienta, a serwer nie będzie wiedział, że klient został rozłączony. Co więcej, Socket.IO obsługuje różne inne mechanizmy (inne niż gniazda TCP) do przesyłania danych iw takich przypadkach klient nie będzie (lub nie może) wysyłać wiadomości o zakończeniu do serwera.

Domyślnie klient Socket.IO wyśle ​​bicie serca do serwera co 15 sekund (pulsu interwał), a serwer nie słyszał od klienta w ciągu 20 sekund (timeout tętno) go uzna klienta za odłączony.

Nie mogę myśleć o wielu typowych przypadkach użycia, w których prawdopodobnie nie chcesz używać pulsu.

+1

Może warto wyjaśnić, dlaczego są potrzebne? Dlaczego serwer nie wykryłby rozłączenia klienta za pośrednictwem zdarzenia/wywołania 'onclose'? – leggetter

+0

Dobre połączenie, leggetter. Trochę go zaktualizowałem. –

+0

Bardzo przejrzysta aktualizacja. Twoje zdrowie. – leggetter

Powiązane problemy