NodeJS HTTPServer需要很长时间才能关闭



我正在开发一个Zappa应用程序,目前我正在尝试制作一个小的监视脚本,该脚本可以停止服务器,清除require.cache,然后在文件更改时重新要求并重新启动服务器,类似于:

# watch all dependent files
for file of require.cache
  fs.watch file, ->
    # attach a handler to 'close'
    # -- here's the issue: this takes far too long to trigger
    server.on 'close', ->
      server = require './server'
      server.start()
      # log the new server's id
      console.log server.id
    # stop the current server instance
    server.stop()
    # clear require's cache
    delete require.cache[f] for f of require.cache

我的请求处理程序中还有一行console.log server.id,这样我就可以检查ID是否匹配。

因此,发生的情况是:当我更改依赖项时,服务器停止,一个新的服务器启动,并记录新的ID,这一切都很顺利。然而,在之后的一段随机时间内,对服务器的请求仍然记录旧ID,这表明旧侦听器仍然以某种方式连接。最终,侦听器似乎"切换"了,并记录了新的ID。

更新:这似乎与close事件有关(不足为奇)-如果我将一个简单的console.log 'close'回调附加到close事件,则ID在'close'出现后开始更改。然而,触发close事件可能需要很长时间(10s+),为什么需要这么长时间?

根据node.js文档:

server.close()

停止服务器接受新连接。参见网络。Server.close().

因此,您的服务器将停止接受新连接,但在当前连接关闭之前,它不会真正关闭(并发出close事件)。我的猜测是,您有客户端连接到它,可能有keep-alive请求。

我在寻找同样的问题。给你和其他搜索这个解决方案:

如果这不是项目中的问题,则可以立即关闭所有连接。这完全解决了我的收尾问题。

app.use((req, res, next) => {
    res.setHeader('Connection', 'close');
    next();
});

相关内容

  • 没有找到相关文章

最新更新