在 Node.js 中,可以通过多进程的方式提高应用程序的性能和稳定性。Node.js 提供了 cluster 模块,它允许在单个 Node.js 实例中创建多个子进程,每个子进程都可以处理独立的任务。以下是一个简单的示例,演示如何使用 cluster 模块创建多进程的 Node.js 应用:
const cluster = require('cluster');
const os = require('os');

if (cluster.isMaster) {
  // 如果是主进程
  console.log(`Master process ${process.pid} is running`);

  // 创建子进程,每个 CPU 核心一个
  const numCPUs = os.cpus().length;
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  // 监听子进程退出事件,如果有子进程退出,创建新的子进程
  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker process ${worker.process.pid} died`);
    cluster.fork();
  });
} else {
  // 如果是工作进程
  console.log(`Worker process ${process.pid} started`);

  // 在这里编写实际的应用逻辑
  const http = require('http');
  const server = http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello, world!\n');
  });

  server.listen(3000, () => {
    console.log(`Server is listening on port 3000 in worker process ${process.pid}`);
  });
}

在这个例子中,如果是主进程(cluster.isMaster 为真),则创建与 CPU 核心数相同的子进程,并监听子进程退出事件。如果有子进程退出,主进程会创建一个新的子进程来代替。如果是子进程,则创建 HTTP 服务器来处理实际的应用逻辑。

通过这种方式,可以充分利用多核系统的资源,提高应用程序的并发处理能力。在实际应用中,可以根据具体需求进行更复杂的进程管理和通信。注意,cluster 模块并不是唯一的多进程管理方式,还可以使用其他模块,如 pm2、forever 等,或结合容器化技术来管理多进程。


转载请注明出处:http://www.zyzy.cn/article/detail/4750/Node.js