2012-09-29 10 views
30

Ich mache tatsächlich einige Belastungstests gegen einen ExpressJS-Server, und ich bemerkte, dass die Antwort vom Server eine "Connection: Keep-Alive" -Header enthält. Soweit ich es verstehe, bleibt die Verbindung solange offen, bis der Server oder der Client eine "Verbindung: Schließen" -Header sendet.Wie setze ich das HTTP Keep-Alive-Timeout in einem Nodejs-Server

In einigen Implementierungen wird der Header "Connection: Keep-Alive" mit einem "Keep-Alive" -Header versehen, der das Verbindungszeitlimit und die maximale Anzahl aufeinanderfolgender Anforderungen über diese Verbindung festlegt.

Zum Beispiel: "Keep-Alive: timeout = 15, max = 100"

Gibt es eine Möglichkeit (und ist es relevant), diese Parameter auf einem Express-Server zu setzen?

Wenn nicht, wissen Sie, wie ExpressJS dies behandelt?

Edit: Nach einigen Untersuchungen, fand ich heraus, dass das Standard-Timeout in den node standard http library gesetzt:

socket.setTimeout(2 * 60 * 1000); // 2 minute timeout 

Um dies zu ändern:

var http = require('http'); 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end("Hello World"); 
}).on('connection', function(socket) { 
    socket.setTimeout(10000); 
}).listen(3000); 

Wie auch immer noch sieht es aus ein bisschen komisch für mich, dass der Server keinen Hinweis an den Client bezüglich seiner Zeitüberschreitung sendet.

Edit2: Danke an josh3736 für seinen Kommentar.

setSocketKeepAlive ist nicht verwandt mit HTTP keep-alive. Es ist eine TCP-Level-Option, mit der Sie erkennen können, dass das andere Ende der Verbindung verschwunden ist.

Antwort

20

Für Express 3:

var express = require('express'); 
var app = express(); 
var server = app.listen(5001); 

server.listen(3000); 

server.on('connection', function(socket) { 
    console.log("A new connection was made by a client."); 
    socket.setTimeout(30 * 1000); 
    // 30 second timeout. Change this as you see fit. 
}) 
Verwandte Themen