2013-04-26 13 views
5

Buduję aplikację przy użyciu pliku node.js, a aplikacja komunikuje się z serwerem Tomcat. Podczas uruchamiania serwera tomcat nie jestem pewien, czy Tomcat jest gotowy i czy się pojawił czy nie, na razie używam CURL i WGET na Windowsie i Macu z czasem oczekiwania wynoszącym 2 sekundy, aby sprawdzić, czy localhost: 8080 pojawił się.Jaki jest najlepszy sposób ustalenia, czy Tomcat rozpoczął pracę z plikiem node.js

Czy jest lepszy sposób na zrobienie tego bez polegania na CURL i WGET?

Odpowiedz

1

Cóż, można dokonać żądania od node.js aplikacji:

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 
    }); 
}); 

Dokumentacja:

http://nodejs.org/docs/v0.4.11/api/http.html#http.request

+0

wciąż otrzymuję błąd: "Got error: połączyć ECONNREFUSED" nawet gdy używam sudo. – user220755

+0

@ user220755 używasz portu 8080, więc zmień port 80 na 8080 w danym pliku exmaple. I do testowania podaj ścieżkę jako "/ – user568109

+0

Czy to, niestety, nie zadziałało. – user220755

2

Zaproponowany sposób jest stworzenie usługi pulsu w sprawie stosowania tomcat (czyli prosta usługa, która wysyła OK, gdy jest w górze) i odpytywanie co x sekund.
Usługa monitorowania tętna jest niezbędna do monitorowania podczas działania aplikacji, a czasami aplikacja nie jest gotowa, mimo że nasłuchuje na porcie (ponieważ trwają intensywne inicjowanie).

Są jednak inne sposoby, jeśli na tym samym serwerze możesz uruchomić Catalina.out, dopóki nie otrzymasz linii "uruchomionej przez serwer".
Możesz skonfigurować swoją aplikację tomcat, aby powiadomić serwer, że jest włączony (chociaż to znaczy, że kocur musi znać adres URL serwera node.js) lub alternatywnie ustawić kolejkę komunikatów (np. ApacheMq lub podobną), może zarejestrować się, gdy kocioł się podniesie, pozwoli to również na wysyłanie wiadomości między tymi dwiema usługami.

2

Można zaimplementować funkcję httpWatcher (naśladując umowę dotyczącą pliku obserwatora - fs.watch). Może sondować punkt końcowy http (trasę stanu lub plik html) i wywołać wywołanie zwrotne po zwróceniu wartości 200 (lub po osiągnięciu maksymalnej liczby uruchomień). Coś takiego:

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); 
} 

następnie używać go tak:

watch('http://blah.asdfasdfasdfasdfasdfs.com/', function(err, isGood) { 
    if (!err) { 
     console.log(isGood); 
    } 
}); 

Albo przechodzą w opcji ...

watch('http://www.google.com/', {interval:1000,maxRuns:3}, 
    function(err, isGood) { 
    if (!err) { 
     console.log(isGood); 
    } 
}); 
Powiązane problemy