为了减少长期应用程序重启造成的停机时间,我想到了类似的方法:
- 端口 80 上的主应用程序 #1。
- 端口 80 上的故障转移应用程序 #2,但仅在应用程序 #1 不工作时才响应请求。
- 让 App #2 为活跃用户提供“维护”消息。
在同一个端口上运行两个进程以Error: EADDRINUSE
- 所以简单的方法不起作用。我偶然发现了该server.on('error')
事件,并决定让 App #2 等到 App #1 可能停止,以便端口可用:
function tryPitchIn(){
var server = http.createServer(app);
server.on('listening', function(){
console.log('Application #1 crashed/ended');
console.log('Pitching in...');
});
server.on('error', function(){
console.log('noting to do');
setTimeout(tryPitchIn, 250);
});
server.listen(80);
}
tryPitchIn();
虽然上面的工作很好,但我不得不在 App #1 的初始化中结束 App #2,这在不同的操作系统上并不容易。
是否可以为节点进程(由 启动npm start
)提供静态 ID 以从另一个进程终止它 - 最好是跨操作系统?或者该场景的其他想法?