Cluster in einem Knotenmodul verwenden

AKTUALISIEREN: Auch wenn dieses spezielle Szenario laut Kommentaren nicht realistisch ist, interessiert mich immer noch, wie man ein Modul schreiben kann, das Clustering nutzt, ohne den übergeordneten Prozess jedes Mal erneut auszuführen.

Ich versuche, ein Node.js-Modul mit dem Namen zu schreibenmass-request Dies beschleunigt eine große Anzahl von HTTP-Anforderungen, indem sie an untergeordnete Prozesse verteilt werden.

Ich hoffe, dass es von außen so funktioniert.

var mr = require("mass-request"),
    scraper = mr();

for (var i = 0; i < my_urls_to_visit.length; i += 1) {
    scraper.add(my_urls_to_visit[i], function(resp) {
        // do something with response
    }
}

Zu Beginn habe ich ein Skelett für das Massenanforderungsmodul zusammengestellt.

var cluster = require("cluster"),
    numCPUs = require("os").cpus().length;

module.exports = function() {
    console.log("hello from mass-request!");
    if (cluster.isMaster) {
        for (var i = 0; i < numCPUs; i += 1) {
            var worker = cluster.fork();             
        }

        return {
            add: function(url, cb) {}       
        }       
    } else {
        console.log("worker " + process.pid + " is born!");
    }  
}

Dann teste ich es so in einem Testskript:

var m = mr();
console.log("hello from test.js!", m);

Ich hatte erwartet "Hallo von Massenanfrage!" Viermal eingeloggt (wie es tatsächlich ist). Zu meinem Erstaunen sehe ich auch vier Mal "Hallo von test.js". Klar verstehe ich nicht wiecluster.fork() funktioniert. Wird der gesamte Prozess erneut ausgeführt, nicht nur die Funktion, die ihn beim ersten Mal aufruft?

Wenn ja, wie kann man Clustering in einem Modul nutzen, ohne die Person zu stören, die dieses Modul mit chaotischer Multiprozesslogik verwendet?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage