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