Nodejs http模块 server.setTimeout(msecs, callback) 和 server.timeout 有什么分别?

Nodejs http模块 server.setTimeout(msecs, callback) 和 server.timeout 有什么分别?

2 回复

Node.js HTTP 模块 server.setTimeout(msecs, callback)server.timeout 有什么分别?

在 Node.js 中,HTTP 服务器可以通过 http.Server 对象来创建。这个对象提供了多种配置选项和事件处理机制,以便更好地管理和监控连接。其中,server.setTimeout(msecs, callback)server.timeout 是两个与连接超时管理相关的属性和方法。它们虽然都涉及超时处理,但功能和使用场景有所不同。

server.timeout

server.timeout 是一个属性,用于设置或获取服务器的默认超时时间(以毫秒为单位)。当客户端连接到服务器后,在指定时间内没有发送任何数据,则该连接会被自动关闭。默认情况下,这个值为 2 分钟(即 120000 毫秒)。

const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello World\n');
});

// 设置超时时间为 5 秒
server.timeout = 5000;

server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

server.setTimeout(msecs, callback)

server.setTimeout(msecs, callback) 是一个方法,用于为特定请求设置超时时间。它允许你在每次请求时动态地设置不同的超时时间,并且可以提供一个回调函数,在超时时执行自定义逻辑。

const http = require('http');

const server = http.createServer((req, res) => {
    // 为当前请求设置 5 秒超时
    req.setTimeout(5000, () => {
        console.log('Request timed out');
        res.writeHead(408, { 'Content-Type': 'text/plain' });
        res.end('Request Timeout\n');
    });

    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello World\n');
});

server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

总结

  • server.timeout 是一个全局属性,用于设置所有连接的默认超时时间。
  • server.setTimeout(msecs, callback) 是一个方法,可以为每个请求单独设置超时时间,并且可以在超时时执行自定义逻辑。

理解这两者的区别有助于更灵活地管理和优化你的 Node.js 应用程序中的连接超时行为。


在Node.js中,http.Server 提供了 server.setTimeout(msecs, callback)server.timeout 两个属性来处理HTTP请求的超时问题。它们虽然都与超时有关,但用途和行为有所不同。

server.timeout

server.timeout 是一个数值,表示服务器等待数据的时间(毫秒)。如果在这个时间段内没有接收到任何数据,服务器将自动关闭连接。默认值为2分钟(120000毫秒)。

示例:

const http = require('http');

const server = http.createServer((req, res) => {
  // 处理请求
}).setTimeout(30000); // 设置超时时间为30秒

server.on('timeout', (req) => {
  console.log(`Request from ${req.socket.remoteAddress} timed out.`);
});

server.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

server.setTimeout(msecs, callback)

server.setTimeout(msecs, callback) 是一个方法,用于设置整个请求处理过程中的超时时间。它允许你在指定的时间内不接收任何数据的情况下执行自定义逻辑。callback 是当超时发生时调用的函数。

示例:

const http = require('http');

const server = http.createServer((req, res) => {
  req.setTimeout(5000, () => {
    console.log('Request has timed out.');
    res.end();
  });

  // 模拟长时间无响应
  setTimeout(() => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello World\n');
  }, 6000);
});

server.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

总结

  • server.timeout 是一个数值,用于设置默认的超时时间。
  • server.setTimeout(msecs, callback) 是一个方法,允许你为每个请求设置单独的超时时间,并在超时发生时执行回调函数。

这两个特性帮助你更好地控制和管理HTTP请求的超时问题。

回到顶部