2011-08-28 15 views
8

Zastanawiam się, czy ktoś może mi powiedzieć, jaki jest domyślny limit czasu żądania HTTP podczas używania wyrażenia.Czas oczekiwania na żądanie HTTP Express.js

Co mam na myśli przez to: po ilu sekundach obsługi żądania http serwer Express/Node.js zamknie połączenie, gdy przeglądarka lub serwer zamkną połączenie ręcznie?

Jak zmienić ten limit czasu dla pojedynczej trasy? Chciałbym ustawić około 15 minut na specjalną ścieżkę konwersji dźwięku.

Wielkie dzięki.

Tom

Odpowiedz

5

req.connection.setTimeout(ms); może być złym pomysłem, ponieważ wiele żądań może być wysłanych przez to samo gniazdo.

Spróbuj connect-timeout lub użyj:

var errors = require('./errors'); 
const DEFAULT_TIMEOUT = 10000; 
const DEFAULT_UPLOAD_TIMEOUT = 2 * 60 * 1000; 

/* 
Throws an error after the specified request timeout elapses. 

Options include: 
    - timeout 
    - uploadTimeout 
    - errorPrototype (the type of Error to throw) 
*/ 
module.exports = function(options) { 
    //Set options 
    options = options || {}; 
    if(options.timeout == null) 
     options.timeout = DEFAULT_TIMEOUT; 
    if(options.uploadTimeout == null) 
     options.uploadTimeout = DEFAULT_UPLOAD_TIMEOUT; 
    return function(req, res, next) { 
     //timeout is the timeout timeout for this request 
     var tid, timeout = req.is('multipart/form-data') ? options.uploadTimeout : options.timeout; 
     //Add setTimeout and clearTimeout functions 
     req.setTimeout = function(newTimeout) { 
      if(newTimeout != null) 
       timeout = newTimeout; //Reset the timeout for this request 
      req.clearTimeout(); 
      tid = setTimeout(function() { 
       if(options.throwError && !res.finished) 
       { 
        //throw the error 
        var proto = options.error == null ? Error : options.error; 
        next(new proto("Timeout " + req.method + " " + req.url)); 
       } 
      }, timeout); 
     }; 
     req.clearTimeout = function() { 
      clearTimeout(tid); 
     }; 
     req.getTimeout = function() { 
      return timeout; 
     }; 
     //proxy end to clear the timeout 
     var oldEnd = res.end; 
     res.end = function() { 
      req.clearTimeout(); 
      res.end = oldEnd; 
      return res.end.apply(res, arguments); 
     } 
     //start the timer 
     req.setTimeout(); 
     next(); 
    }; 
} 
+0

Dzięki, zmieniłeś swoją na zaakceptowaną odpowiedź. – Tom

6

req.connection.setTimeout(ms); wydaje się ustawić limit czasu żądania do serwera HTTP w Node.js.

+3

to nie ustawia limit czasu połączenia limit czasu żądania. – kilianc

Powiązane problemy