2012-09-29 23 views
30

Estoy haciendo algunas pruebas de carga contra un servidor ExpressJS, y noté que la respuesta enviada por el servidor incluye un encabezado "Connection: Keep-Alive". Por lo que yo entiendo, la conexión permanecerá abierta hasta que el servidor o el cliente envíe un encabezado "Conexión: Cerrar".Cómo configurar el tiempo de espera HTTP Keep-Alive en un servidor nodejs

En algunas implementaciones, el encabezado "Connection: Keep-Alive" aparece con un encabezado "Keep-Alive" que establece el tiempo de espera de conexión y el número máximo de solicitudes consecutivas que se envían a través de esta conexión.

Por ejemplo: "Keep-Alive: timeout = 15, max = 100"

¿Hay alguna manera (y es relevante) para establecer estos parámetros en un servidor Express?

Si no es así, ¿sabe cómo ExpressJS maneja esto?

Editar: Después de algunas investigaciones, descubrí que el tiempo de espera predeterminado se establece en el node standard http library:

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

Con el fin de cambiar esta situación:

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

De todos modos todavía se ve un poco extraño para mí que el servidor no envíe ninguna pista al cliente sobre su tiempo de espera.

Edit2: Gracias a josh3736 por su comentario.

setSocketKeepAlive no está relacionado con HTTP keep-alive. Es una opción de nivel TCP que le permite detectar que el otro extremo de la conexión ha desaparecido.

Respuesta

20

Por 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. 
}) 
Cuestiones relacionadas