私はnode.jsを使ってアプリケーションを構築しており、そのアプリケーションはTomcatサーバーと通信しています。 Tomcatサーバーが起動している間、Tomcatが準備完了しているかどうかわからないので、WindowsとMacでCURLとWGETを使用して、localhost:8080が起動しているかどうかを2秒間確認します。Tomcatがnode.jsで始まったと判断する最良の方法は何ですか
CURLとWGETに依存せずにこれを行うより良い方法はありますか?
私はnode.jsを使ってアプリケーションを構築しており、そのアプリケーションはTomcatサーバーと通信しています。 Tomcatサーバーが起動している間、Tomcatが準備完了しているかどうかわからないので、WindowsとMacでCURLとWGETを使用して、localhost:8080が起動しているかどうかを2秒間確認します。Tomcatがnode.jsで始まったと判断する最良の方法は何ですか
CURLとWGETに依存せずにこれを行うより良い方法はありますか?
さて、あなたは、Node.jsのアプリからの要求を行うことができます。
var http = require("http");
var options = {
host: "example.com",
port: 80,
path: "/foo.html"
};
http.get(options, function(resp){
var data = "";
resp.on("data", function(chunk){
data += chunk;
});
resp.on("end", function() {
console.log(data);
// do something with data
});
}).on("error", function(e){
// HANDLE ERRORS
console.log("Got error: " + e.message);
}).on("socket", function(socket) {
// ADD TIMEOUT
socket.setTimeout(2000);
socket.on("timeout", function() {
req.abort();
// or make the request one more time
});
});
ドキュメント:
の提案方法は、Tomcatアプリケーション(IE A上のハートビートサービスを作成することですそれが稼働しているときにOKを送信する単純なサービス)、毎x秒ごとにポーリングします。
ハートビートサービスは、アプリケーションの実行中に監視するために不可欠です。また、ポートですでにリッスンしているにもかかわらず、アプリケーションが準備できていない場合もあります。
他の方法がありますが、同じサーバーにいる場合は、「サーバーが開始しました」行を受信するまでcatalina.outを尾行できます。
Tomcatアプリケーションをセットアップして、サーバーに通知します(ただし、Tomcatはnode.jsサーバーのURLを知る必要があります)。あるいは、ApacheMqなどのようなメッセージキューを設定しますtomcatが起動しているときに登録することができます。これにより、2つのサービス間でプッシュメッセージが可能になります。
httpWatcher(ファイルウォッチャー - fs.watchの契約を模倣する)を実装することができます。 httpエンドポイント(ステータスルートまたはhtmlファイル)をポーリングし、200が返されたとき(または最大実行に達したとき)にコールバックを起動します。このような何か:
var request = require('request');
var watch = function(uri) {
var options;
var callback;
if ('object' == typeof arguments[1]) {
options = arguments[1];
callback = arguments[2];
} else {
options = {};
callback = arguments[1];
}
if (options.interval === undefined) options.interval = 2000;
if (options.maxRuns === undefined) options.maxRuns = 10;
var runCount = 0;
var intervalId = setInterval(function() {
runCount++;
if(runCount > options.maxRuns) {
clearInterval(intervalId);
callback(null, false);
}
request(uri, function (error, response, body) {
if (!error && response.statusCode == 200) {
clearInterval(intervalId);
callback(null, true);
}
});
}, options.interval);
}
そして、そのようにそれを使用します。
watch('http://blah.asdfasdfasdfasdfasdfs.com/', function(err, isGood) {
if (!err) {
console.log(isGood);
}
});
やオプションに渡す...
watch('http://www.google.com/', {interval:1000,maxRuns:3},
function(err, isGood) {
if (!err) {
console.log(isGood);
}
});
私はエラーを取得しておく: "ガット・エラー:ECONNREFUSEDを接続します"私がsudoを使っていても。 – user220755
@ user220755あなたはポート8080を使用しているので、指定された例ではポート80を8080に変更してください。そしてテストのためにパスを '/'として与える – user568109
残念ながら、それはうまくいきませんでした。 – user220755