Как установить тайм-аут 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.
})