2015-07-09 21 views
7

Mam serwer node.js i używam socket.io do komunikacji w czasie rzeczywistym między serwerem a klientami. Zauważyłem, że jeśli klient mobilny (Using Ionic Framework) rozłącza się nagle, nie informując o tym serwera, gniazda są żywe przez wiele godzin (lub na zawsze). Przeczytałem i przejrzałem ich dokumentację i oni mają opcje jak pingInterval, pingtimeout, heartbeat interval, heartbeat timeout, close timeout.Konfigurowanie limitu czasu pulsu, interwału pulsu i zamykania limitu czasu na serwerze

Jak skonfigurować te wartości na moim serwerze?

Które z tych wartości są przestarzałe?

Oto mój kod.

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){...} 

Żadne z nich nie działa. Każda pomoc lub wskazówki są wysoko cenione.

PS: Ja składanie gniazda z mojej kolekcji, gdy klient rozłączy i to działa dobrze, gdy klienci serwera powiedzieć, że chcą rozłączeniem wdziękiem.

Odpowiedz

1

Musisz użyć pingTimeout jak wspomniano tutaj: https://github.com/Automattic/socket.io/issues/1900

Upewnij się także, aby ustawić opcje jak poniżej, ponieważ io.set zniknął.

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

Więcej na: http://socket.io/docs/migrating-from-0-9/#configuration-differences

Jednakże, jeśli to nie zadziała, są szanse jonowy jest faktycznie utrzymywanie połączenia w tle. Z projektu sprzed około roku pamiętam, że miałem wiele takich problemów i ostatecznie wyłączyłem gniazdo z odłączaniem jonowym, gdy przeszło ono w tle.

+0

Co z 'pingInterval'? –

+0

Jak mówią dokumenty, 'pingInterval (Number): ile ms przed wysłaniem nowego pakietu ping (25000)'. Nie sądzę, że ma to znaczenie w twoim przypadku. –