Node.JS中的垃圾收集套接字

时间:2015-12-15 22:45:35

标签: node.js sockets garbage-collection

我正在使用一个Node库,它在完成后不会显式关闭套接字。相反,它试图通过删除对套接字的引用并让它们被垃圾收集来清理。

谷歌搜索让我失望:我不认为GC可以清理未关闭的套接字。也就是说,从操作系统的角度来看,我认为任何套接字描述符仍将被使用。

另外,假设我作为库使用者可以访问套接字对象,关闭它们的最佳方法是什么?我使用了end()close()destroy()并取得了有限的成功。有时他们似乎会陷入永久性(结束/毁灭),有时似乎回调永远不会发生(接近)。

1 个答案:

答案 0 :(得分:1)

这可能是因为您的套接字发送了FIN包并挂起连接,同时等待另一端发送FIN2消息。如果另一侧的插座没有很好地关闭,那么您的插座将不会收到任何包装,因此会永远挂起 实际上,end sends a FIN packet并没有关闭套接字。

当您调用setTimeout函数时,可以通过end通过wait for a while on it获得explicitly destroy it,然后{{3}}通过函数destroy。如果另一端已正确关闭连接,这不会影响您的套接字,否则会强制关闭并释放所有资源。