【发布时间】:2013-10-01 03:01:41
【问题描述】:
为了减少因应用程序长时间重启而导致的停机时间,我想到了类似的方法:
- 端口 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 以从另一个进程终止它 - 最好是跨操作系统?还是对场景的其他想法?
【问题讨论】:
-
我不想重新启动它,我只想为当前活跃的用户提供一个“我们正在维护我们的服务”页面! (我需要在应用更新时重新启动服务器,这可能需要几秒钟来构建公共库等)
-
在 Nginx 之类的东西后面反向代理您的应用程序是一种有效(且常见)的策略。
标签: javascript node.js process failover