2015-06-29 10 views
8

Non riesco a trovare come impostare le opzioni di heartbeat per socket.io? Mi piacerebbe essere in grado di specificare cosa succede quando si verifica un "timeout" e quando il server non ha ricevuto alcuna risposta dal client per qualche tempo.Socket.io che specifica il battito cardiaco

Per qualche motivo, l'evento di disconnessione non si attiva sempre, anche se è trascorso più di un'ora senza che il client non sia connesso. Questo accade spesso con la standalone Java socket.io client

+0

Stesso successo. Le mie prese sono vive per oltre un giorno anche se il client si è disconnesso. Hai trovato qualche soluzione? –

+0

Purtroppo no, non ancora. –

risposta

14

Socket.IO utilizza engine.io, che consente di specificare ping interval and ping timeout, in questo modo:.

var app = require('express')(); 
var http = require('http').Server(app); 

var io = require('socket.io')(http, {'pingInterval': 2000, 'pingTimeout': 5000}); 

(2 secondo intervallo e 5, secondo timeout è solo un esempio Si sarebbe modo di frequenti e inefficienti)

+2

come determinare l'intervallo e il timeout più efficaci? il default di 25 e 60 secondi sembra troppo lungo per me o sono ok? –

+0

@ alexey.hippie È difficile dare una raccomandazione per ogni situazione :) Potresti sperimentare valori molto più bassi e se hai problemi di prestazioni, portali un po '. Non vedo un motivo per cambiarlo se davvero non devi. – Tholle

+0

Grazie, continuerà a provare :) –

6

per me il seguente lavorato:

var app = express(); 
var server = require('http').createServer(app); 
var io = require('socket.io')(server); 

io.set('heartbeat timeout', 4000); 
io.set('heartbeat interval', 2000); 

per le versioni di dipendenze:

"express": "^4.12.3", 
"socket.io": "1.0" 
+0

4000 = 4 secondi o 4 minuti? – YumYumYum

+1

Il parametro è in millisecondi, quindi 4000 = 4 secondi (sì, è un periodo molto breve, ma nel mio caso era necessario ...) – WiRa

+0

Che cosa fa esattamente l'intervallo 2 secondi e il timeout 4 secondi? A) se 4 secondi nessuna connettività allora timeout B) intervallo significa ogni 2 secondi verificare che la connettività sia attiva o meno. destra? – YumYumYum