使用node.js如何在关闭现有请求之前停止新请求?

问题描述 投票:0回答:1

运行没有错误:

const app = express();

const server = app.listen(3900, '0.0.0.0', () => {
  console.log('listening...');
});

process.once('SIGINT', () => {

  console.log('got SIGINT.')

  setTimeout(() => {
    console.log('ending process due to SIGINT + subsequent Timeout.')
    process.exit(0);
  }, 3000);

  server.closeIdleConnections();  // <<<
  server.closeAllConnections();  // <<<<

  server.close(err => {
    if (err) {
      console.error(err);
    }
    console.log('closed server, and now shutting down due to SIGINT.')
    process.exit(0);
  });
});

但我的问题是 - 这是在结束现有连接/请求之前停止接受新连接的最佳方法吗?

“空闲”连接是如何定义的?

node.js http https httpserver
1个回答
0
投票

在您的代码中,您尝试处理 'SIGINT' 信号以正常关闭服务器。但是,方法 'server.closeIdleConnections()''server.closeAllConnections()' 不是标准 Express API 的一部分。相反,您应该使用 'server.close()' 停止接受新连接,然后等待现有连接完成,然后再关闭服务器。这是代码的更新版本:

javascript

const app = express();

const server = app.listen(3900, '0.0.0.0', () => {
  console.log('listening...');
});

process.once('SIGINT', () => {
  console.log('got SIGINT.');

  server.close((err) => {
    if (err) {
      console.error(err);
      process.exit(1);
    }

    console.log('closed server, and now shutting down due to SIGINT.');
    process.exit(0);
  });
});

此代码将通过关闭服务器并等待现有连接完成然后退出进程来正常关闭您的服务器。关于您关于“空闲”连接的问题,在 Express 等 Web 服务器的上下文中,空闲连接是指打开但不主动发送或接收数据的连接。 server.close() 方法将等待这些空闲连接完成,然后再关闭服务器。

© www.soinside.com 2019 - 2024. All rights reserved.