Как установить тайм-аут HTTP Keep-Alive на сервере nodejs

Я на самом деле делаю некоторое нагрузочное тестирование против сервера ExpressJS, и я заметил, что ответ, отправленный сервером, включает заголовок "Connection: Keep-Alive". Насколько я понимаю, соединение будет оставаться открытым до тех пор, пока сервер или клиент не отправит заголовок "Connection: Close".

в некоторых реализациях заголовок "Connection: Keep-Alive" содержит заголовок "Keep-Alive", устанавливающий время ожидания соединения и максимальное количество последовательных запросов через это соединение.

например: "Keep-Alive: timeout=15, max=100"

есть ли способ (и имеет ли это значение) установить эти параметры на экспресс-сервере ?

Если нет, знаете ли вы, как ExpressJS обрабатывает это ?

Edit: После некоторых исследований я обнаружил, что тайм-аут по умолчанию установлен в узел стандартная библиотека http:

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

для того чтобы изменить это:

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

в любом случае мне все еще кажется немного странным, что сервер не отправляет клиенту никаких намеков относительно его таймаута.

Edit2: Спасибо josh3736 за его комментарий.

setSocketKeepAlive не связан с HTTP keep-alive. Это опция уровня TCP, которая позволяет обнаружить, что другой конец соединения исчез.

1 ответов


Для 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.
})