2017-09-28 1 views
0

Mit PM2 zum ersten Mal bin ich etwas verwirrt über etwas. Ich bin mit einer sehr einfachen HTTP-Server auf Port 1337 und mit PM2, um sie auszuführen:PM2 läuft mehrere Server auf dem gleichen Port

var http = require('http'); 
var server = http.createServer(function (request, response) { 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.end("Hello World\n"); 
}); 
server.listen(1337); 

und es läuft wie folgt:

pm2 start app.js 

Was ich nicht verstehe, ist, wenn ich ausführen der oben genannte Befehl() mehrmals, PM2 erstellt mehr Instanzen dieser App ohne jedes Problem. Aber gibt es keinen Konflikt, da alle auf Port 1337 hören? Und wenn nicht, was bewirken mehrere gleichzeitig? Wenn eine Anfrage eingeht, zu welcher geht es?

Dank

Antwort

0

Angenommen, Sie haben bereits einen Server auf Port 1337
ausgeführt hatte Wenn Sie versuchen, einen anderen Server auf dem gleichen Port zu laufen, sollten Sie die folgende Fehler

Error: listen EADDRINUSE 0.0.0.0:1337 
    at Object.exports._errnoException (util.js:1036:11) 
    at exports._exceptionWithHostPort (util.js:1059:20) 
    at Server._listen2 (net.js:1252:14) 
    at listen (net.js:1288:10) 
    at Server.listen (net.js:1384:5) 
    at EventEmitter.listen (/share/CE_CACHEDEV1_DATA/Web/radiationRepository/web/node_server/node_modules/express/lib/application.js:618:24) 
    at Object.<anonymous> (/share/CE_CACHEDEV1_DATA/Web/radiationRepository/web/node_server/server.js:51:5) 
    at Module._compile (module.js:556:32) 
    at Object.Module._extensions..js (module.js:565:10) 
    at Module.load (module.js:473:32) 

Dieser Fehler erhalten Stoppen Sie den Knoten. Für PM2, wenn es das Ausfahrtssignal empfängt, sollte es versuchen, den Server wieder und nutzen Sie die folgenden Protokolle

0|app  | Error: listen EADDRINUSE 0.0.0.0:1337 
0|app  | Caught exception: Error: listen EADDRINUSE 0.0.0.0:1337 
PM2  | App [app] with id [0] and pid [1167], exited with code [0] via signal [SIGINT] 
PM2  | Starting execution sequence in -fork mode- for app name:app id:0 
PM2  | App name:app id:0 online 

ich einige Protokolle hier übersprungen haben, neu zu starten. Daher sollte nur ein Server am Port vorhanden sein. PM2 wird weiterhin die Tasks akzeptieren und versuchen, den Server neu zu starten, wenn dieser Fehler auftritt.
Sie können pm2 logs für die Suche nach den Protokollen von PM2 laufen

Update: Ich habe versucht, die gleiche Skripte mit PM2 laufen. pm2 erlaubte mir nicht, das gleiche Skript mit mehreren Zeit zu laufen, wenn ich die Dateien nicht änderte.

Verwandte Themen