Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何立即关闭Node.js http(s)服务器?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Node.js应用程序包含一个http服务器。

在特定情况下,我需要以编程方式关闭此服务器。我目前做的是调用它的close()函数,但这并没有帮助,因为它等待任何保持活着的连接首先完成。

所以,基本上,这会关闭服务器,但只有在最短等待时间120秒后。但我想要服务器立即关闭 – 即使这意味着分解与当前处理的请求。

我不能做的是一个简单的

process.exit();

因为服务器只是应用程序的一部分,而应用程序的其余部分应该保持运行。我在寻找的是概念上的东西,如server.destroy();或类似的东西。

我该如何实现呢?

PS:连接的保持活动超时通常是必需的,因此它不是减少此时间的可行选项。

@H_607_22@解决方法
诀窍是你需要订阅服务器的连接事件,它给你新的连接的套接字。你需要记住这个套接字和以后,直接调用server.close()后,使用socket.destroy()销毁该套接字。

此外,您需要侦听套接字的关闭事件,如果它自然离开,将其从数组中删除,因为它的保持活动超时时间用完。

我写了一个小样本应用程序,您可以用来演示此行为:

// Create a new server on port 4000
var http = require('http');
var server = http.createServer(function (req,res) {
  res.end('Hello World!');
}).listen(4000);

// Maintain a hash of all connected sockets
var sockets = {},nextSocketId = 0;
server.on('connection',function (socket) {
  // Add a newly connected socket
  var socketId = nextSocketId++;
  sockets[socketId] = socket;
  console.log('socket',socketId,'opened');

  // Remove the socket when it closes
  socket.on('close',function () {
    console.log('socket','closed');
    delete sockets[socketId];
  });

  // Extend socket lifetime for demo purposes
  socket.setTimeout(4000);
});

// Count down from 10 seconds
(function countDown (counter) {
  console.log(counter);
  if (counter > 0)
    return setTimeout(countDown,1000,counter - 1);

  // Close the server
  server.close(function () { console.log('Server closed!'); });
  // Destroy all open sockets
  for (var socketId in sockets) {
    console.log('socket','destroyed');
    sockets[socketId].destroy();
  }
})(10);

基本上,它做的是启动一个新的http服务器,从10到0,并在10秒后关闭服务器。如果未建立连接,服务器将立即关闭

如果连接已建立并且它仍然打开,则它被销毁。如果它已经自然死亡,则在该时间点仅打印出消息。

大佬总结

以上是大佬教程为你收集整理的如何立即关闭Node.js http(s)服务器?全部内容,希望文章能够帮你解决如何立即关闭Node.js http(s)服务器?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。