节点:http模块,无法更改连接超时

时间:2019-07-10 00:26:22

标签: javascript node.js http timeout

我在设置与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');
   });
});

理论上,如果我打开一个保持活动的连接,则在闲置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秒超时。 / p>

有趣的是,使用Chrome打开http://localhost:1089/(不使用Firefox,它仅打开一个连接,该连接在几秒钟后关闭),它打开两个连接,第一个连接在几秒钟后关闭,而第二个保持打开120秒。

但是,如果我使用netcat从两个终端一次打开两个连接,那么几秒钟后两个连接都将关闭。

我还尝试了三种添加方式

server.setTimeout(120000, () => {
   console.log('server timeout');
});

代码:

  1. 仅在创建服务器后添加它:没什么变化,两个超时的输出都在同一时间打印。
  2. 注释套接字超时:相同的行为,只是现在只是触发服务器超时。
  3. 评论整个server.on('connection')部分:与上面相同。

0 个答案:

没有答案