首页  >  文章  >  web前端  >  在 Node.js 应用程序中创建集群

在 Node.js 应用程序中创建集群

DDD
DDD原创
2024-11-02 09:37:02417浏览

Criando Clusterização em Aplicações Node.js

Node.js 是开发可扩展应用程序的流行平台,但其单线程架构在高负载情况下可能成为瓶颈。为了充分利用 Node.js 的强大功能,集群是一种有效的技术,它允许您使用多个 CPU 核心,从而提高应用程序的性能和响应能力。

先决条件

  • Node.js 安装在您的计算机上。您可以从nodejs下载最新版本。
  • 基本熟悉 JavaScript 和 Node.js。

第 1 步:创建一个新的 Node.js 项目

首先,为您的项目创建一个新目录并启动一个新的 Node.js 项目:

mkdir node-cluster
cd node-cluster
npm init -y

第2步:安装依赖项

在本教程中,您只需要 Node.js 本身,但我们将使用 Express 来创建一个简单的 HTTP 服务器。使用以下命令安装express:

npm install express

第 3 步:创建具有集群的服务器

创建一个名为 server.js 的文件并添加以下代码:

const cluster = require('cluster');
const express = require('express');
const http = require('http');
const os = require('os');

const app = express();
const numCPUs = os.cpus().length;

// Middleware para simular processamento intenso
app.get('/', (req, res) => {
  let sum = 0;
  for (let i = 0; i < 1e7; i++) {
    sum += i;
  }
  res.send(`Soma: ${sum}, Processado pelo Worker: ${process.pid}`);
});

// Lógica de clusterização
if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Cria um worker para cada núcleo de CPU
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} morreu`);
  });
} else {
  // Cada worker escuta na mesma porta
  const server = http.createServer(app);
  server.listen(3000, () => {
    console.log(`Worker ${process.pid} started`);
  });
}

集群配置必须根据您的机器或服务器上可用的CPU数量来完成。例如,如果您的服务器有 6 个 CPU,则最好创建 6 个工作线程以充分利用可用资源。使用多于 CPU 核心的工作线程可能会导致过载和性能下降,而使用较少的工作线程可能会导致资源利用不足。建议测试不同的配置,以找到性能和资源利用率之间的理想平衡。

第 4 步:运行应用程序

现在您可以运行您的应用程序了。使用以下命令:

node server.js

如果您按照示例操作,您将在终端中看到类似以下内容的内容:

Master 12345 is running
Worker 12346 started
Worker 12347 started
Worker 12348 started

第 5 步:测试应用程序

要使用curl测试本地服务器的/路由,可以使用以下命令:

curl http://localhost:3000/

当您在终端中运行上述命令时,您应该会收到类似于以下内容的响应:

Soma: 49999995000000, Processado pelo Worker: 12348

以上是在 Node.js 应用程序中创建集群的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn