cluster.close()
和 cluster.queue()
是 Node.js 中 cluster
模块的方法。cluster
模块允许你创建多个工作进程,这些进程共享相同的服务器端口。这对于利用多核 CPU 的能力非常有用。
当你在调用 cluster.queue()
后调用 cluster.close()
导致“崩溃”,可能的原因有:
cluster.close()
之前,可能没有正确关闭所有的工作进程。以下是一个示例代码,展示如何正确关闭集群:
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`);
});
// 关闭集群的正确方法
process.on('SIGINT', () => {
console.log('Closing cluster...');
cluster.disconnect(() => {
console.log('All workers disconnected');
process.exit(0);
});
});
} 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`);
// 监听关闭信号
process.on('message', (msg) => {
if (msg === 'shutdown') {
console.log(`Worker ${process.pid} shutting down...`);
process.exit(0);
}
});
}
通过上述代码,你可以确保在关闭集群时,所有的工作进程都能正确关闭,并且队列中的任务得到妥善处理。这样可以避免“崩溃”的问题。
领取专属 10元无门槛券
手把手带您无忧上云