pm2在同一端口上运行多个服务器

时间:2017-09-28 03:12:57

标签: javascript node.js pm2

第一次使用pm2,我对某些事情感到有些困惑。我在端口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); 上运行一个非常简单的http服务器并使用pm2运行它:

pm2 start app.js

并按如下方式运行:

pm2 start app.js

我不明白的是,如果我多次执行上述命令(1337),pm2会毫无问题地创建此应用程序的更多实例。但是,由于所有人都在监听端口{{1}},所以不存在冲突吗?如果不是,它们中的多个同时运行会产生什么影响?如果请求进来,请问哪一个?

由于

1 个答案:

答案 0 :(得分:0)

假设您已经在端口1337上运行了服务器 如果您尝试在同一端口上运行另一台服务器,则应收到以下错误

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)

此错误将停止节点。对于pm2,当它收到退出信号时,它应该尝试再次重启服务器并获得以下日志

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

我在这里跳过了一些日志。因此,端口上应该只有一个服务器。如果出现此错误,PM2仍将接受任务并尝试重新启动服务器。
您可以运行pm2 logs来查找pm2的日志

<强>更新 我试图用pm2运行相同的脚本。除非我更改了文件,否则pm2不允许我多次运行相同的脚本。