2011-08-28 29 views
8

Me preguntaba si alguien podría decirme cuál es el tiempo de espera de solicitud HTTP predeterminado cuando se usa Express.Express.js Tiempo de espera de solicitud HTTP

Lo que quiero decir con esto es: ¿después de cuántos segundos de tratar con una solicitud http el servidor Express/Node.js cerrará la conexión, cuando el navegador o el servidor cerraron la conexión manualmente?

¿Cómo modifico este tiempo de espera para una ruta única? Me gustaría establecerlo en unos 15 minutos para una ruta especial de conversión de audio.

Muchas gracias.

Tom

Respuesta

5

req.connection.setTimeout(ms); puede ser una mala idea, ya que se pueden enviar varias solicitudes en el mismo socket.

Trate connect-timeout o utilizar esto:

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

Gracias, cambió el suyo por la respuesta aceptada. – Tom

6

req.connection.setTimeout(ms); aparece para establecer la solicitud de tiempo de espera para un servidor HTTP en Node.js.

+3

Esto establece el tiempo de espera de conexión no la solicitud de tiempo de espera. – kilianc

Cuestiones relacionadas