NodeJS如何开启多进程?
在Node.js中,有几种方法可以用来开启多进程,以便更好地利用多核CPU资源。以下是一些常见的方法:
- child_process模块
Node.js的child_process模块允许你创建子进程,这些子进程可以运行系统命令、使用其他语言的脚本或者执行其他的Node.js文件。你可以使用spawn、fork、exec或execFile等方法来创建子进程。
例如,使用fork方法创建一个新的Node.js子进程:
const { fork } = require('child_process');
const child = fork('child.js');
child.on('message', (message) => {
console.log('Received message from child:', message);
});
child.send({ hello: 'world' });
在child.js文件中,你可以处理接收到的消息,并发送消息回父进程:
process.on('message', (message) => {
console.log('Received message from parent:', message);
});
process.send({ foo: 'bar' });
- cluster模块
Node.js的cluster模块允许你创建一组可以共享服务器端口的子进程(这些子进程被称为工作进程)。这对于创建一个负载均衡的HTTP服务器非常有用,每个工作进程都可以处理一部分请求。
以下是一个使用cluster模块创建多进程HTTP服务器的简单示例:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case, it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
- 使用PM2等进程管理器
除了Node.js内置的多进程支持外,你还可以使用像PM2这样的第三方进程管理器来管理你的Node.js应用。PM2可以自动为你的应用创建多个工作进程,并提供负载均衡、日志管理、应用重启等功能。
安装PM2后,你可以使用以下命令来启动你的Node.js应用:
pm2 start app.js -i max # 使用所有可用的CPU核心启动应用
或者指定要使用的核心数量:
pm2 start app.js -i 4 # 使用4个核心启动应用
浙公网安备 33010602011771号