我在两个不同的组件中有两个不同的Nodejs服务器,但是它们一起在同一软件中运行。关闭程序时,我希望两台服务器正常退出,并释放它们各自的TCP端口。
对于每个人,我都有:
server1.js
:
process.on('exit', function(){
server.close();
});
server2.js
:
process.on('exit', function(){
server.close();
});
问题是,使用此方法只能运行这两个函数之一。
在一个功能中将它们一起关闭不是一种选择。
是否有将 add 函数添加到“退出”事件的功能?
答案 0 :(得分:3)
Node.js流程exit
事件可以有多个侦听器。
此
process
.on('exit', () => console.log('foo'))
.on('exit', () => console.log('bar'));
应该导致
foo
栏
输出。
无需显式关闭Node.js Web服务器,因为它们将在进程退出时以任何方式关闭。
exit
事件监听器通常不是关闭连接的适当位置,因为这通常是异步过程。 exit
侦听器应该是同步的:
侦听器功能只能执行同步操作。调用“退出”事件侦听器后,Node.js进程将立即退出,从而导致仍在事件循环中排队的任何其他工作都将被放弃。
虽然beforeExit
事件侦听器在某些情况下可以跳过,但适用于异步操作:
当Node.js清空其事件循环时,发出“ beforeExit”事件 并且没有其他工作要做。通常,Node.js进程 如果没有安排工作,但是注册了侦听器,则将退出 在“ beforeExit”事件上可以进行异步调用,从而 导致Node.js进程继续。
<...>
对于导致显式的条件,不会发出“ beforeExit”事件 终止,例如调用process.exit()或未捕获的异常。