2012-02-07 15 views
9

Devo essere in grado di rilevare quando un utente ha perso la connessione al socket, non sembra che venga chiamato socket.on("disconnect") quando chiudo il mio laptop, quindi non lo fa eseguire la chiamata ajax che deve essere eseguita per aggiornare il database per contrassegnare l'utente come offline. Come posso verificare se la connessione è stata chiusa o altro?Socket IO rileva quando il client ha perso la connessione

+0

mi avrebbe proposto avere un ascoltatore, o un 'battito' che controlla i clienti di una risposta dal server. Questo è quello che faccio. –

+1

L'ho fatto in una versione precedente del mio sito web, sebbene abbia dato a un numero sufficiente di utenti in un dato momento sembra che potrebbe essere una sorta di sovraccarico sul server, per quanto riguarda il numero di richieste, anche se potrebbe essere il migliore, e solo l'opzione. –

+0

socket.io utilizza un heartbeat, quindi sono sicuro che questo è fattibile – EhevuTov

risposta

2

ci siamo imbattuti anche in questo e come accennato in precedenza utilizzare il nostro proprio battito del cuore.

Ad esempio il server emetterà un heartbeat ogni 5 secondi (inviamo semplicemente il tempo del server). Il client ha un timeout di 11 secondi, quindi ha 2 possibilità di catturare l'heartbeat. Se riceve il battito cardiaco, azzeriamo il timer. Se perdiamo entrambi gli heartbeat, viene eseguita la funzione di timeout e tu fai quello che vuoi lì.

Abbastanza semplice.

3

Come indicato qui https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO, Socket.IO ha la propria implementazione heartbeat. Ma i valori di default sono un intervallo di 25 secondi e una soglia di 60 secondi per una connessione persa.

Quindi il mio consiglio: Impostare i valori predefiniti come previsto durante il test. Altrimenti potresti perdere la soglia.

Esempio:

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

Questa dovrebbe essere la risposta accettata. Funziona per la prima volta ... Nel mio caso il timeout e l'intervallo sono impostati in millisecondi, quindi 10000 anziché 10 ... Perfetto Grazie! –

Problemi correlati