Подтвердить что ты не робот

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

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

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

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

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

Если нет, знаете ли вы, как ExpressJS справляется с этим?

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

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-уровня, который позволяет вам обнаружить, что другой конец соединения исчез.

4b9b3361

Ответ 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.
})