为了减少因长期应用程序重新启动而导致的停机时间,我想到了类似的方法:
- 端口 80 上的主应用 #1。
- 也会在端口 80 上对应用程序 #2 进行故障转移,但仅在应用程序 #1 无法工作时才应答请求。
- 让应用 #2 为活跃用户提供“维护”消息。
在同一端口上运行两个进程最终会出现错误: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,这在不同的操作系统上并不容易做到。
是否可以为 Node 进程(由 npm start
初始化)提供一个静态 ID,以从另一个进程(最好是跨操作系统)终止它?或者该场景的其他想法?
最佳答案
您可以在另一个端口上为您的应用程序 #1 提供服务,并编写一个微应用程序来代理对其的请求,并在对应用程序 #1 的请求失败时返回其他内容。您可以使用像here这样的node-http-proxy ,或者推出您自己的解决方案,例如 this并添加一个“on error”子句。
关于javascript - Node.js 在一个端口上运行两个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107242/