Узел: модуль http, невозможно изменить время ожидания для подключения - PullRequest
1 голос
/ 10 июля 2019

У меня проблема с установкой тайм-аута для соединения с модулем 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');
});

к коду:

  1. Просто добавьте его после создания сервера: ничего не изменилось, выходные данные обоих тайм-аутов печатаются одновременно.
  2. Комментирование времени ожидания сокета: такое же поведение, только теперь он просто запускает тайм-аут сервера.
  3. Комментирование всей части server.on('connection'): То же, что и выше.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...