私はnode.js.でアプリケーションを持っていますNode.js:クラスター内に異なるコードを持つワーカー?
このアプリケーションは、3つの部分に分かれています。他の二つの部分を開始
launcher.js、およびクリーニングを処理した後にクラッシュ/更新時にそれらを再起動してください。コンピュータ自身に取り組む
app.js、。ログと異なるコマンドにアクセスするために使用される
server.js。
ランチャーのための単純化されたコードは次のとおりです。
var cluster = require('cluster'),
exec = require('child_process').exec,
server;
if (cluster.isMaster) {
cluster.fork();
server = exec('server.js');
cluster.on('exit', function(worker, code, signal) {
//Clean corrupted data, log crash if neccessary, reload source code for update ...
cluster.fork();
});
server.on('exit', function() {
//Same as for app, with a different handling of signal...
server = exec('node server.js');
});
} else {
var self = require('app.js);
self.start();
}
クラスタと良いことは、彼らはランチャーと同じプロセスであるということですので、私はアプリを再起動せずに、いくつかのエラーを処理することができます(ただ呼び出します自己の "ソフトリブート"のためのアプリ内の適切な機能)、そしてすべてを同じプロセスに保ちます。
は幹部との間に、私はいつか何が悪かったのか知らなくても、サーバーの再起動で立ち往生M、そしてそれは私が嫌いサブシェルを有することを意味します。
異なるコードをクラスタをforkが、起動する方法はありますか?
は、なぜあなたは '( 'child_process')必要が含まれなかったのexec;'最初のコード例では。?私はあなたがどこでこれをどこで使ったか分かりませんでした。 – qodeninja
@qodeninja:この例を最小限に抑えたエラーは、後でコードで使用しましたが、これを指摘してくれてありがとうございます。) – DrakaSAN