繁体   English   中英

为什么 NodeJs 集群模块不起作用?

[英]Why is NodeJs cluster module not working?

所以基本上我正在构建一个express服务器,我最近研究了扩展 NodeJS 应用程序的主题。 我看到的第一件事是内置cluster模块,以利用机器处理器的所有线程。 这是我所做的实现代码:

import cluster from "cluster";
import { cpus } from "os";

import dotenv from "dotenv";
dotenv.config();

import express, { Express } from "express";
import log from "./logger";
import database from "./database";
import router from "./router";

const app: Express = express();

// Middleware
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

const port = <number>(<unknown>process.env.PORT);
const host = <string>process.env.HOST;

const numCPU = cpus().length;
if (cluster.isPrimary) {
   for (let i = 0; i < numCPU; i++) {
      cluster.fork();
   }

   cluster.on("listening", (worker) => {
      // Not printing anything
      console.log(worker.process.pid);
   });

   cluster.on("exit", (worker, code, signal) => {
      log.error(`Worker ${worker.process.pid} died. Starting a new worker...`);
      cluster.fork();
   });
} else {
   app.listen(port, host, () => {
      // Only prints this once.
      log.info(`Server ${process.pid} listening at http://${host}:${port}`);
      database();
      router(app);
   });
}

问题是cluster.isPrimary从不运行当然意味着集群没有其他进程分叉。 但是,当我使用cluster.isMaster时,一切都按预期工作。 但是由于 isMaster 已被弃用并被 isPrimary 取代,这就是我想要使用的,但它不起作用。

我尝试过但不起作用的解决方案:

  1. 杀死我机器上的所有节点进程。
  2. 从此主文件中删除所有内容,只留下准系统应用程序和集群配置。

我究竟做错了什么?

它最有可能是您正在运行的节点版本。 isPrimary 仅在 16+ 版本中可用,您很可能拥有 LTS 版本,即 v14

前段时间,在 NODE 版本 v0.8.1 中添加的cluster.isMaster从 16.0.0 版本开始被弃用。 仅当您的 NODE 版本至少为 16.0.0 时,只需将已弃用的cluster.isMaster替换为cluster.isPrimary (就像您所做的那样)。

如果您不知道您的版本,请输入node -v并在终端中按回车键。 如果您需要更新您的 NODE 版本,您有不同的选项,具体取决于您的操作系统。 如果您在 PC 上运行 Windows 或 mac,您可以 - 例如 - 访问 NODE 官方网站并下载并安装最新版本: https ://nodejs.org/en/download/current/

如果进程是主进程,则后台cluster.isPrimary返回 true。 相反,如果进程不是主进程,您可以使用cluster.isWorker返回 true。 所以这是对cluster.isPrimary的否定。

许多博客文章、文章和教程仍在应用已弃用的cluster.isMaster 这会导致第一次处理 NODE 集群的节点用户感到恼火。

官方信息由 NODE 提供: https ://nodejs.org/api/cluster.html#clusterismaster

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM