【问题标题】:How can I find out why nodejs isn't exiting cleanly?我怎样才能找出为什么 nodejs 没有干净地退出?
【发布时间】:2014-12-07 21:18:06
【问题描述】:

让我先解释一下“干净地退出”是什么意思。

如果我有一个 nodejs 应用程序并且我执行 setTimeout 很长时间,或者如果我打开一个我没有关闭的套接字连接,那么当我运行该应用程序时它不会退出。原因很清楚,我认为这是一个很好的原因,nodejs 的工作方式是等到“没有更多工作要做”,然后退出。这很好,我喜欢这种操作方式。这也迫使我在干净地关闭套接字和不让计时器闲置方面有点自律。另一件好事。

但是,我遇到的问题是,我收到了一些不符合此规则的代码,并且它没有干净地退出。我怀疑某处的代码留下了一个打开的套接字,但是代码被缩小了,所以找到这个套接字打开的点并不容易。

我的问题是,有没有一种方法可以查询 nodejs 以找出哪些套接字是打开的?通过看到这样一个带有 ip 号码的列表,我可以开始挖掘以找出打开它们的代码在哪里。

【问题讨论】:

  • 为什么要手动关闭套接字? //每当客户端断开连接时,套接字本身就会关闭。
  • 这是关于从 nodejs 应用程序打开的套接字,因此 nodejs 应用程序是客户端,而不是服务器。
  • 您是否获得了一些进一步的见解?我目前在我的应用中看到了类似的问题,我很好奇为什么该应用保持打开状态。

标签: node.js sockets


【解决方案1】:

我写了一个包来帮助解决这个问题:wtfnode

我在试图弄清楚为什么我的下载量与我一样多时偶然发现了这个问题;虽然这个问题现在已经很老了,但我认为这可能会帮助将来搜索类似术语的人。

如果没有来自您原始帖子的更多信息,很难说出您的具体问题是什么,但一种可能性是由于 HTTP 保持活动(作为客户端或服务器)而导致的延迟套接字。

【讨论】:

  • wtfnode 看起来很不错。我还没有尝试过,但这正是我所需要的。标记为“正确”的答案。干得好!
  • 谢谢 :) 很抱歉,当您需要它时,它无法提供帮助,但希望更多人能找到它来帮助他们!
  • 对我很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 2020-02-27
相关资源
最近更新 更多