2012-02-07 15 views
9

Potrzebuję być w stanie wykryć, kiedy użytkownik stracił połączenie z gniazdem, nie wydaje się, że socket.on("disconnect") jest wywoływana, gdy po prostu zamykam laptopa, więc nie ma uruchom wywołanie ajax, które musi zostać uruchomione, aby zaktualizować bazę danych, aby oznaczyć użytkownika jako offline. Jak mogę sprawdzić, czy połączenie zostało zamknięte, czy co?Socket IO wykrywa, gdy klient utracił połączenie

+0

że proponuje o detektor, lub „bicia serca”, który sprawdza klientów na odpowiedź z serwera. To właśnie robię. –

+1

Zrobiłem to w poprzedniej wersji mojej strony internetowej, chociaż biorąc pod uwagę wystarczającą liczbę użytkowników w danym momencie, wydaje się, że może to być po prostu przeciążenie na serwerze, jeśli chodzi o liczbę żądań, choć może to być najlepsze, i tylko opcja. –

+0

socket.io używa pulsu, więc jestem pewien, że jest to wykonalne. – EhevuTov

Odpowiedz

2

natknęliśmy się również na to i jak wspomniano powyżej, korzystaj z własnego zegara czasu pracy serca.

Na przykład serwer będzie emitował pulsowanie co 5 sekund (wysyłamy prosty czas serwera). Klient ma 11-sekundowy limit czasu, więc ma 2 szanse na złapanie bitu. Jeśli otrzyma puls, resetujemy timer. Jeśli pominiemy oba uderzenia serca, uruchamiana jest funkcja limitu czasu i robisz, co chcesz.

Dość proste.

3

Jak wspomniano tutaj https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO, Socket.IO ma własną implementację pulsu. Ale domyślne ustawienia to przedział 25 sekund i próg 60s dla utraconego połączenia.

Moja rada: Ustaw wartości domyślne zgodnie z oczekiwaniami podczas testowania. W przeciwnym razie możesz pominąć próg.

przykład:

socket.set("heartbeat timeout", 10); 
socket.set("heartbeat interval", 5); 
+0

To powinna być zaakceptowana odpowiedź. Działa po raz pierwszy ... W moim przypadku limit czasu i interwał są ustawione w milisekundach, więc 10000 zamiast 10 ... Doskonałe dzięki! –

Powiązane problemy