У меня проблема с установкой тайм-аута для соединения с модулем http.
Мой код следующий:
server = require('http').createServer(function(req,res) {
res.writeHead(200,{'Content-Type':'text/plain'});
res.end('Hello World!');
}).listen(1089);
server.on('connection', function (socket) {
console.log('socket opened');
socket.on('close', function () {
console.log('socket closed');
});
// Extend socket lifetime
socket.setTimeout(120000, () => {
console.log('Timeout socket');
});
});
Теоретически, если я открываю соединение keep-alive,он должен закрыться после 120 секунд бездействия.
Используя netcat, я получаю правильный вывод:
echo -e "GET /test HTTP/1.1\nConnection: keep-alive\n\n" | netcat -C -q -1 localhost 1089
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Wed, 10 Jul 2019 00:12:50 GMT
Connection: keep-alive
Transfer-Encoding: chunked
c
Hello World!
0
И я также получаю правильный вывод в терминале:
socket opened
Timeout socket
socket closed
Единственная проблема заключается в том, что он закрывает соединение через несколько секунд вместо 120. Я уже много чего пробовал, но не могу найти способ изменить это, чтобы достичь тайм-аута 120 секунд.
Интересно, что, открыв http://localhost:1089/
с помощью Chrome (не с Firefox, он открывает только одно соединение, которое закрывается через несколько секунд), он открывает два соединения, первое из которых закрывается через несколько секунд, но второе остаетсяоткрыть в течение 120 секунд.
Но если я открываю два соединения одновременно с двух терминалов с netcat, оба закрываются через несколько секунд.
Я также триИмеется три способа добавления
server.setTimeout(120000, () => {
console.log('server timeout');
});
к коду:
- Просто добавьте его после создания сервера: ничего не изменилось, выходные данные обоих тайм-аутов печатаются одновременно.
- Комментирование времени ожидания сокета: такое же поведение, только теперь он просто запускает тайм-аут сервера.
- Комментирование всей части
server.on('connection')
: То же, что и выше.