Node.js
Cluster-Modul
Suche…
Syntax
- const cluster = required ("Cluster")
- cluster.fork ()
- cluster.isMaster
- cluster.isWorker
- cluster.schedulingPolicy
- cluster.setupMaster (Einstellungen)
- cluster.settings
- cluster.worker // in worker
- cluster.workers // in master
Bemerkungen
Beachten Sie, dass cluster.fork()
einen cluster.fork()
Prozess erzeugt, der mit der Ausführung des aktuellen Skripts von Anfang an beginnt, im Gegensatz zum Systemaufruf fork()
in C, der den aktuellen Prozess cluster.fork()
und die Anweisung nach dem Systemaufruf in parent und fortsetzt Kindprozess.
Die Node.js Dokumentation hat eine komplette Anleitung zum Cluster hier
Hallo Welt
Dies ist Ihre cluster.js
:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// 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
require('./server.js')();
}
Dies ist dein server.js
:
const http = require('http');
function startServer() {
const server = http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello Http');
});
server.listen(3000);
}
if(!module.parent) {
// Start server if file is run directly
startServer();
} else {
// Export server, if file is referenced via cluster
module.exports = startServer;
}
In diesem Beispiel hosten wir einen einfachen Webserver, wir starten jedoch Arbeiter (untergeordnete Prozesse) mithilfe des integrierten Cluster- Moduls. Die Anzahl der Prozesswähler hängt von der Anzahl der verfügbaren CPU-Kerne ab. Dies ermöglicht einer Node.js-Anwendung, Multi-Core-CPUs zu nutzen, da eine einzelne Instanz von Node.js in einem einzigen Thread ausgeführt wird. Die Anwendung teilt jetzt den Port 8000 über alle Prozesse hinweg. Lasten werden standardmäßig automatisch unter Verwendung der Round-Robin-Methode zwischen Arbeitern verteilt.
Cluster-Beispiel
Eine einzelne Instanz von Node.js
in einem einzelnen Thread ausgeführt. Um die Vorteile von Multicore-Systemen zu nutzen, kann die Anwendung in einem Cluster von Node.js-Prozessen gestartet werden, um die Last zu handhaben.
Mit dem cluster
Modul können Sie auf einfache Weise untergeordnete Prozesse erstellen, die alle Serverports gemeinsam nutzen.
Im folgenden Beispiel erstellen Sie den Worker Child-Prozess im Hauptprozess, der die Last über mehrere Kerne hinweg übernimmt.
Beispiel
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length; //number of CPUS
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork(); //creating child process
}
//on exit of cluster
cluster.on('exit', (worker, code, signal) => {
if (signal) {
console.log(`worker was killed by signal: ${signal}`);
} else if (code !== 0) {
console.log(`worker exited with error code: ${code}`);
} else {
console.log('worker success!');
}
});
} 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(3000);
}