9
votes

Express.js timeout de demande http

Je me demandais si quelqu'un pouvait me dire ce que le délai d'attente de la requête HTTP par défaut est lorsque vous utilisez Express.

Ce que je veux dire par ceci est: après combien de secondes de traiter avec une requête HTTP le serveur Express / Node.js fermera la connexion, lorsque le navigateur ni le serveur a fermé la connexion manuellement?

Comment puis-je modifier ce délai d'attente pour un seul itinéraire? Je voudrais la définir à environ 15 minutes pour une itinéraire de conversion audio spéciale.

Merci beaucoup.

Tom


0 commentaires

3 Réponses :


7
votes

req.connection.settimeout (MS); apparaît pour définir le délai de requête pour un serveur HTTP dans Node.js.


1 commentaires

Cela définit le délai de connexion et non le délai de requête.



5
votes

req.connection.settimeout (MS); code> pourrait être une mauvaise idée puisque plusieurs demandes peuvent être envoyées sur la même socket.

Essayez Connect-Timeout ou utilisez ceci: P>

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 commentaires

3
votes

Le délai de requête par défaut dans NODE V0.9 + est 2 minutes . C'est ce que les utilisations expresses.

Vous pouvez l'augmenter pour un seul itinéraire à l'aide de: P>

app.get('/longendpoint', function (req, res) {
   req.setTimeout(360000); // 5 minutes
   ...
});


0 commentaires