web-dev-qa-db-fra.com

Comment définir le délai d'expiration HTTP Keep-Alive dans un serveur nodejs

Je fais actuellement des tests de charge sur un serveur ExpressJS, et j'ai remarqué que la réponse envoyée par le serveur comprend un en-tête "Connection: Keep-Alive". Si je comprends bien, la connexion restera ouverte jusqu'à ce que le serveur ou le client envoie un en-tête "Connection: Close".

Dans certaines implémentations, l'en-tête "Connection: Keep-Alive" propose un en-tête "Keep-Alive" définissant le délai de connexion et le nombre maximal de requêtes consécutives envoyées via cette connexion.

Par exemple: "Keep-Alive: timeout = 15, max = 100"

Existe-t-il un moyen (et est-il pertinent) de définir ces paramètres sur un serveur Express?

Sinon, savez-vous comment ExpressJS gère cela?

Edit: Après quelques investigations, j'ai découvert que le délai par défaut est défini dans la bibliothèque http standard de noeud :

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

Pour changer cela:

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

Quoi qu'il en soit, cela me semble encore un peu bizarre que le serveur n'envoie aucune indication au client concernant son délai d'expiration.

Edit2: Merci à josh3736 pour son commentaire.

setSocketKeepAlive n'est pas lié à HTTP keep-alive. Il s'agit d'une option de niveau TCP qui vous permet de détecter que l'autre extrémité de la connexion a disparu.

37
Miguel L.

Pour Express 3:

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

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.
});
31
dgo.a