2012-09-29 2 views
30

In realtà sto eseguendo alcuni test di carico su un server ExpressJS e ho notato che la risposta inviata dal server include un'intestazione "Connessione: Keep-Alive". Per quanto ho capito, la connessione rimarrà aperta finché il server o il client non invieranno un'intestazione "Connessione: Chiudi".Come impostare il timeout Keep-Alive HTTP in un server nodejs

In alcune implementazioni, l'intestazione "Connessione: Keep-Alive" viene visualizzata con un'intestazione "Keep-Alive" che imposta il timeout della connessione e il numero massimo di richieste consecutive invia tramite questa connessione.

Ad esempio: "Keep-Alive: timeout = 15, max = 100"

C'è un modo (ed è rilevante) per impostare questi parametri su un server Express?

In caso contrario, sai come ExpressJS gestisce questo?

Edit: Dopo alcune indagini, ho scoperto che il timeout predefinito è impostato nella node standard http library:

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

Per cambiare questo:

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); 

In ogni caso sembra ancora un po 'strano per me che il server non invii alcun suggerimento al client riguardo al suo timeout.

Edit2: Grazie a josh3736 per il suo commento.

setSocketKeepAlive non è correlato a HTTP keep-alive. È un'opzione di livello TCP che consente di rilevare che l'altra estremità della connessione è scomparsa.

risposta

20

Per 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. 
})