Node.js:server.setTimeout、server.timeout 和 server.keepAliveTimeout 有什么区别

Sun*_*nny 7 http node.js

官方文档在这里

server.setTimeout 中没有提及服务下一个请求。所以我认为它独立于任何未来的请求或为第一个请求提供服务的时间?如果第一个请求比 server.setTimeout 需要更多时间来服务怎么办?

server.timeout 是套接字超时之前的不活动时间。它不区分传入数据的活动或发送传出数据。

server.keepAliveTimeout 再次指的是不活动,但指的是与传入数据有关的活动 - 服务器在完成写入最后一个响应后需要等待其他传入数据的时间。如果服务器在保持活动超时触发之前接收到新数据,它将重置常规的不活动超时,即 server.timeout。什么时候重置?在接收到新数据的第一个字节之后还是在最后一个字节之后?新数据是指新请求的数据吗?

server.timeout 与不活动有关(传入和传出数据)。server.keepAlive 仅指影响 server.timeout 重置的传入数据。

这些参数在 HTTP 2.0 中有何影响?

听起来让我很困惑。是否有更明确的解释记录在某处?或者有人可以更清楚地解释这一点吗?

编辑:我使用的是 8.x LTS 版本

zer*_*298 6

每当我们使用curl localhost:3000. 他们都将分享以下内容:

const http= require("http");
const server = http.createServer((req, res) => {
    console.log("Got request");

    setTimeout(() => {
        res.end("Hello\n");
    }, 10 * 1000);
});

// ... snippets below

server.listen(3000);
Run Code Online (Sandbox Code Playgroud)

on("timeout")server.timeout

我们只是监听timeout事件。该timeout值设置为5000并按原样打印。

server.on("timeout", () => {
    console.log(server.timeout);
    console.log("Timeout event");
});

server.timeout = 5 * 1000;
Run Code Online (Sandbox Code Playgroud)

setTimeout()server.timeout设置

即使我们在 中设置了时间setTimeout(),我们也不会Timeout CB在 5 秒后看到。

server.setTimeout(1 * 1000, () => {
    console.log(server.timeout);
    console.log("Timeout CB");
});

server.timeout = 5 * 1000;
Run Code Online (Sandbox Code Playgroud)

setTimeout()没有server.timeout设置

我们看到超时处理程序在 1 秒后发生,与默认的 2 分钟相同

server.on("timeout", () => {
    console.log(server.timeout);
    console.log("Timeout event");
});
Run Code Online (Sandbox Code Playgroud)

on("timeout") 没有 server.timeout

这也将服务器设置为在 10 分钟而不是 10 秒后响应。默认2分钟后,我们看到回调正常触发。

与这两个on()setTimeout()

1 秒后触发回调并将server.timeout设置为1000

结论

由此,我们可以假设这setTimeout是一种以timeout编程方式设置的方法。 timeout将设置timeout但不设置回调。 on("timeout")注册将在timeout事件触发后触发的回调。