我在设置与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');
});
代码:
server.on('connection')
部分:与上面相同。