如何在节点进程结束时透明地实现清理动作

当Node进程退出时,我需要执行清理操作。

我知道我可以使用process.on('exit')process.on('Unhandled|Rejected Exception')process.on('<signal>')来监听这样的事件。

不过,我不想约束这些,因为这些原因:

  • 如果我绑定到process.on('exit') ,我不应该做任何asynchronous操作,当你需要通过套接字或pipe道(afaik)写出消息时,这是不可靠的。

  • 如果我绑定到process.on('some exceptions') ,我必须像正常的节点进程打印错误。 我不想重新发明轮子。

  • 如果我绑定process("SIGINT") ,我不得不手动退出进程。 如果其他人也在监听,或者如果我不知道节点进程的退出状态怎么办?

任何想法我应该做什么?

在我的特殊用例中,我将生成一个服务器,当Node退出时,我需要发送一个信号告诉它退出。 我希望这对模块使用者来说尽可能的透明。

谢谢!

让你的客户端进程挂断。

在你的用例中,你提到你有一个从你的nodejs模块到你的服务器的套接字,并且你想在模块退出时终止服务器,因为服务器没有其他的事情要做。 不pipe用哪种方式,客户端通过发送消息(因为客户端可能意外死亡)告诉服务器已经完成了它,但是当它们死亡时,它们已经打开的任何连接都不会closures(在未处理的exception情况下可能需要几分钟,但最终会closures)。

只要保持套接字打开,服务器就可以知道连接还在。 实际上两个程序之间没有stream量需要传递,但服务器可以告诉所有相同的stream量。 而且,当套接字被closures时(因为另一端已经退出),服务器上的套接字将得到socket.on('end')事件。 在这一点上,服务器可以清理资源,其空的事件循环将自动closures。