長時間にわたるアプリの再起動によるダウンタイムの苦痛を軽減するために、次のようなことを考えました。
- ポート 80 のメイン アプリ #1。
- ポート 80 でアプリケーション #2 もフェールオーバーしますが、アプリケーション #1 が機能していない場合にのみ要求に応答します。
- アプリ #2 がアクティブなユーザーに「維持」メッセージを提供できるようにします。
同じポートで 2 つのプロセスを実行すると、最終的にはError: EADDRINUSE
- になるため、単純な方法は機能しません。私はserver.on('error')
イベントに出くわし、アプリ #1 が停止するまでアプリ #2 を待機させることにしたので、ポートが使用可能になります。
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();
上記はうまく機能していますが、アプリ #1 の初期化でアプリ #2 を終了するのに苦労しなければなりません。これは、さまざまなオペレーティング システムで行うのは簡単ではありません。
ノードプロセス(によって開始されたnpm start
)に静的IDを与えて、別のプロセス(できればクロスOS)から終了させることは可能ですか? または、シナリオの他のアイデアはありますか?