【发布时间】:2014-12-07 21:18:06
【问题描述】:
让我先解释一下“干净地退出”是什么意思。
如果我有一个 nodejs 应用程序并且我执行 setTimeout 很长时间,或者如果我打开一个我没有关闭的套接字连接,那么当我运行该应用程序时它不会退出。原因很清楚,我认为这是一个很好的原因,nodejs 的工作方式是等到“没有更多工作要做”,然后退出。这很好,我喜欢这种操作方式。这也迫使我在干净地关闭套接字和不让计时器闲置方面有点自律。另一件好事。
但是,我遇到的问题是,我收到了一些不符合此规则的代码,并且它没有干净地退出。我怀疑某处的代码留下了一个打开的套接字,但是代码被缩小了,所以找到这个套接字打开的点并不容易。
我的问题是,有没有一种方法可以查询 nodejs 以找出哪些套接字是打开的?通过看到这样一个带有 ip 号码的列表,我可以开始挖掘以找出打开它们的代码在哪里。
【问题讨论】:
-
为什么要手动关闭套接字? //每当客户端断开连接时,套接字本身就会关闭。
-
这是关于从 nodejs 应用程序打开的套接字,因此 nodejs 应用程序是客户端,而不是服务器。
-
您是否获得了一些进一步的见解?我目前在我的应用中看到了类似的问题,我很好奇为什么该应用保持打开状态。