Тайм-аут HTTP-запроса Express.js - PullRequest
       18

Тайм-аут HTTP-запроса Express.js

8 голосов
/ 28 августа 2011

Мне было интересно, может ли кто-нибудь сказать мне, каково время ожидания HTTP-запроса по умолчанию при использовании Express.

Что я имею в виду под этим: через сколько секунд обработки http-запроса будет Express / Node.js сервер закрывает соединение, когда браузер или сервер закрыли соединение вручную?

Как изменить это время ожидания для одного маршрута?Я бы хотел установить около 15 минут для специального маршрута преобразования звука.

Большое спасибо.

Том

Ответы [ 3 ]

6 голосов
/ 30 августа 2011

req.connection.setTimeout(ms); появляется для установки времени ожидания запроса для HTTP-сервера в Node.js.

5 голосов
/ 24 мая 2012

req.connection.setTimeout(ms); может быть плохой идеей, поскольку несколько запросов могут быть отправлены через один сокет.

Попробуйте время ожидания соединения или используйте это:

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 голосов
/ 16 января 2019

Время ожидания запроса по умолчанию в Node v0.9 + составляет 2 минуты .Это то, что использует экспресс.

Вы можете увеличить его для одного маршрута, используя:

app.get('/longendpoint', function (req, res) {
   req.setTimeout(360000); // 5 minutes
   ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...