我怎样才能找出为什么 nodejs 没有干净地退出?

Mik*_*ist 3 sockets node.js

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

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

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

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

小智 6

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

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

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