小编典典

强制关闭node.js http服务器中的所有连接

node.js

我有使用以下方法创建的http服务器:

var server = http.createServer()

我想关闭服务器。大概我可以通过调用以下命令来做到这一点:

server.close()

但是,这只会阻止服务器接收任何新的http连接。它不会关闭任何仍在打开的窗口。http.close()进行回调,并且直到所有打开的连接实际上都断开连接后,该回调才会执行。有办法强制关闭所有内容吗?

对我来说,问题的根源在于我有Mocha测试,该测试在其设置(beforeEach())中启动http服务器,然后在其拆卸(afterEach())中将其关闭。但是,由于仅调用server.close()不会完全关闭设备,因此后续操作http.createServer()通常会导致EADDRINUSE错误。等待close()完成也不是一种选择,因为打开的连接可能会花费很长时间。

我需要某种方式来强制关闭连接。我可以在客户端执行此操作,但是可以强制关闭所有测试连接,但是我宁愿在服务器端执行此操作,即只是告诉http服务器硬关闭所有套接字。


阅读 729

收藏
2020-07-07

共1个答案

小编典典

你需要

  1. 订阅connection服务器事件并将打开的套接字添加到数组
  2. 通过订阅它们的close事件并从数组中删除关闭的套接字来跟踪打开的套接字
  3. destroy需要终止服务器时,在所有其余打开的套接字上调用

您还可以在子进程中运行服务器,并在需要时退出该进程。

2020-07-07