首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么NodeJs集群模块不能工作?

为什么NodeJs集群模块不能工作?
EN

Stack Overflow用户
提问于 2021-08-30 04:26:14
回答 2查看 1.9K关注 0票数 2

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

代码语言:javascript
运行
复制
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所取代,所以我正试图使用它,但它根本不起作用。

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

删除machine.

  • Remove上所有节点进程--从这个主文件开始--只剩下barebone应用程序和集群configuration.

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-30 20:30:52

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

票数 4
EN

Stack Overflow用户

发布于 2022-06-11 11:28:43

不久前,在节点版本v0.8.1中添加的cluster.isMaster自16.0.0版本起就不再受欢迎了。仅当节点版本至少为16.0.0时,只需用cluster.isMaster替换为cluster.isPrimary (就像您所做的那样)。

如果您不知道您的版本,输入node -v并在您的终端中点击enter。如果需要更新节点版本,则根据操作系统有不同的选项。如果您在PC上运行Windows或mac,您可以访问官方节点网站并下载并安装最新版本:https://nodejs.org/en/download/current/

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

许多博客文章、文章和教程仍然在应用被废弃的cluster.isMaster。这会导致第一次处理节点聚类的节点用户之间的烦扰。

官方信息由以下节点提供:https://nodejs.org/api/cluster.html#clusterismaster

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68978929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档