2015-07-09 6 views
7

Ho un server node.js e sto utilizzando socket.io per la comunicazione in tempo reale tra server e client. Ho notato che se un client mobile (Using Ionic Framework) si disconnette improvvisamente, senza che il server lo sappia, le prese sono vive per ore (o per sempre). Ho letto e guardato la loro documentazione e hanno opzioni come pingInterval, pingtimeout, heartbeat interval, heartbeat timeout, close timeout.Configura timeout heartbeat, heartbeat intervl e timeout chiusura sul server

Come configuro questi valori sul mio server?

Quale di questi valori è stato deprecato?

Ecco il mio codice.

var express = require('express'); 
var app = express(); 
var server = require('http').createServer(app); 
var io = require('socket.io').listen(server); 
io.set('heartbeat interval', 5000); 
io.set('heartbeat timeout', 8000); 
io.set('timeout', 5000); 
io.on('connection', function(socket){...} 

Nessuno di questi sembra funzionare. Qualsiasi aiuto o guida è molto apprezzato.

PS: Sto splicing prese della mia collezione quando un client si disconnette e funziona bene quando i clienti dicono server che vogliono disconnessione con grazia.

risposta

1

Devi usare pingTimeout come detto qui: https://github.com/Automattic/socket.io/issues/1900

anche assicurarsi di impostare le opzioni come il seguente, in quanto io.set è andato.

var io = require('socket.io')({ pingTimeout: 5000 })

Altro: http://socket.io/docs/migrating-from-0-9/#configuration-differences

Tuttavia, se questo non funziona, è probabile che ionico è in realtà mantenendo il collegamento in background. Da un progetto di circa un anno fa, ricordo di aver avuto più problemi come questo e ho finito per rendere forzatamente il socket di disconnessione ionica quando passava in background.

+0

Che dire di 'pingInterval'? –

+0

Come dicono i documenti, 'pingInterval (Numero): quanti ms prima di inviare un nuovo pacchetto ping (25000)'. Non penso sia pertinente nel tuo caso. –