Приложение Node express, использующее кластер, не работает - PullRequest
0 голосов
/ 29 мая 2020

У меня есть приложение, которое использует node.js (express) в качестве серверной части. Теперь я пытаюсь использовать кластер node.js для повышения производительности приложения, но безуспешно ...

Вот мое рабочее приложение. js:

import { Server } from "./server";
import { Debug } from "./utils/Debug";
const cluster = require("cluster");
const http = require("http");
const numCPUs = require("os").cpus().length;
const httpPort = 3000;

 var app = Server.bootstrap().app;
 app.set("port", httpPort);
 var httpServer = http.createServer(app);
 httpServer.listen(httpPort);

А вот код с использованием кластера (который не работает):

import { Server } from "./server";
import { Debug } from "./utils/Debug";
const cluster = require("cluster");
const http = require("http");
const numCPUs = require("os").cpus().length;
const httpPort = 3000;

Debug.log(numCPUs + " CPU(s)!");
if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  // If a worker dies, log it to the console and start another worker.
  cluster.on("exit", function (worker, code, signal) {
    console.log("Worker " + worker.process.pid + " died.");
    cluster.fork();
  });
  cluster.on("online", function (worker) {
    console.log("Worker " + worker.process.pid + " is online");
  });

  // Log when a worker starts listening
  cluster.on("listening", function (worker, address) {
    console.log("Worker started with PID " + worker.process.pid + ".");
  });
} else {
  /**
   * Create HTTP server.
   */
  var app = Server.bootstrap().app;
  app.set("port", httpPort);
  var httpServer = http.createServer(app);
  httpServer.listen(httpPort);
}

Когда я запускаю указанное выше, мой localhost: 3000 не прослушивает.

Что здесь не так?

Спасибо.

1 Ответ

0 голосов
/ 03 июня 2020

Я решил позволить PM2 управлять кластером. Итак, я установил его и управлял своим приложением с его помощью с помощью файла экосистемы.config. js, например:

module.exports = {
  apps: [
    {
      name: "myApp",
      script: "./dist/app.js",
      instances: "max",
      exec_mode: "cluster",
      max_memory_restart: "300M",
      error_file: 'err.log',
      out_file: 'out.log',
      log_file: 'combined.log',
      time: true,
      env: {
        NODE_ENV: "development",
      },
      env_production: {
        NODE_ENV: "production",
      },
    },
  ],
};

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...