Maison >interface Web >js tutoriel >Mise à l'échelle de Node.js avec le module Cluster
Le module Cluster permet à Node.js d'exploiter les systèmes multicœurs, améliorant ainsi les performances des applications. Explorons comment l'utiliser efficacement.
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 gère automatiquement l'équilibrage de charge en utilisant une approche circulaire.
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); }); }
Le module Cluster est puissant pour la mise à l'échelle horizontale, mais à utiliser judicieusement. Créez toujours un profil pour vous assurer qu'il répond à vos besoins de performances spécifiques.
Bravo ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!