Das Cluster-Modul ermöglicht es Node.js, Multi-Core-Systeme zu nutzen und so die App-Leistung zu verbessern. Lassen Sie uns herausfinden, wie Sie es effektiv nutzen können.
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 http.createServer((req, res) => { res.writeHead(200); res.end('Hello World\n'); }).listen(8000); console.log(`Worker ${process.pid} started`); }
Node.js übernimmt den Lastausgleich automatisch mithilfe eines Round-Robin-Ansatzes.
if (cluster.isMaster) { const worker = cluster.fork(); worker.send('Hi there'); } else { process.on('message', (msg) => { console.log('Message from master:', msg); }); }
if (cluster.isMaster) { cluster.on('exit', (worker, code, signal) => { if (!worker.exitedAfterDisconnect) { console.log('Worker crashed. Starting a new worker'); cluster.fork(); } }); process.on('SIGUSR2', () => { const workers = Object.values(cluster.workers); const restartWorker = (workerIndex) => { const worker = workers[workerIndex]; if (!worker) return; worker.on('exit', () => { if (!worker.exitedAfterDisconnect) return; console.log(`Exited process ${worker.process.pid}`); cluster.fork().on('listening', () => { restartWorker(workerIndex + 1); }); }); worker.disconnect(); }; restartWorker(0); }); }
Das Cluster-Modul ist leistungsstark für die horizontale Skalierung, sollte aber mit Bedacht eingesetzt werden. Profilieren Sie immer, um sicherzustellen, dass es Ihre spezifischen Leistungsanforderungen erfüllt.
Prost?
Das obige ist der detaillierte Inhalt vonNode.js mit dem Cluster-Modul skalieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!