2014-09-09 10 views
10

Uruchamiamy aplikację Node.js i Express na Heroku, która korzysta z biblioteki ws dla gniazd internetowych w czasie rzeczywistym. Poniżej znajduje się zrzut ekranu z licznych limitów H15, które widzimy.Node.js Gniazdo sieciowe H15 Limit czasu bezczynności połączenia na Heroku

enter image description here

Czytałem, że Heroku terminates any idle connection after 55 seconds ale nasze gniazda wysłać ping-pong w tę iz powrotem, co 5 sekund, gdy połączenie jest otwarte. Fragment kodu serwera jest poniżej:

var _this = this; 

this.server.on('connection', function(ws){ 

    // check for a ping, respond with pong 
    ws.on('message', function(data){ 
     data = data.toString('utf8'); 
     if (data === PING) { 
      ws.send(PONG); 
     } 
    }); 

    ws.on('close', function(err){ 
     TL.logger.info('Socket closed: '+path); 
     _this.sockets = _.filter(_this.sockets, function(_ws){ 
      return ws != _ws; 
     }); 
    }); 

    ws.on('error', function(err){ 
     TL.logger.info('Socket error: '+path); 
     _this.sockets = _.filter(_this.sockets, function(_ws){ 
      return ws != _ws; 
     }); 
    }); 

    _this.sockets.push(ws); 
}); 

A oto zdjęcie z gniazdem bocznym klienta w chrome:

enter image description here

Każdy pomysł, w jaki sposób, aby zapobiec połączenia bezczynności?

+1

Czy udało się to rozwiązać w ogóle? –

+0

Niestety nie, wciąż mamy kilka pozornie przypadkowych, bezczynnych połączeń. – Andrew

+0

@Andrew Otrzymujemy te same błędy około 2 lata później. Czy kiedykolwiek znalazłeś przyczynę? – FajitaNachos

Odpowiedz

1

Ujawnienie: Jestem właścicielem platformy Node.js w Heroku.

Widzisz to po stronie klienta? A może po prostu panel kontrolny raportowania błędów?

Zalecam skupienie się na odtwarzaniu błędów na co najmniej jednym kliencie, aby sprawdzić, czy rzeczywiście ma on wpływ. W przeciwnym razie możesz tracić czas na debugowanie fałszywych alarmów.

Jeśli zdecydujesz się kontynuować debugowanie, możesz zainstalować bezpłatny dodatek papertrail/nodetime/new relic/strongloop, aby dokładnie określić, które żądania powodują uruchomienie H15.

+0

Dzięki za komentarz! Nie używamy socket.io, tylko modułu ws, i nie mam jeszcze żadnych problemów z klientem, widzę tylko błędy na desce rozdzielczej. – Andrew

+0

Ach przepraszam, większość pytań związanych z websocket opiera się na socket.io. Zaktualizowałem swoją odpowiedź, aby odzwierciedlić bibliotekę ws. – hunterloftis

+0

Otrzymuję te same błędy w aplikacji Meteor (Meteor jest oparty na węźle), ten post sugeruje, że ma to związek z Heroku i domenami root/apex/nagimi (ALIAS/ANAME itp.), Których używamy również: http: // stackoverflow.com/questions/13063683/h15-on-heroku-sse-request –