Usando cluster em um módulo Nó

ATUALIZAR: Mesmo que esse cenário em particular não seja realista, de acordo com os comentários, ainda estou interessado em saber como escrever um módulo que faça uso de cluster sem executar novamente o processo pai a cada vez.

Estou tentando escrever um módulo Node.js chamadomass-request que acelera um grande número de solicitações HTTP, distribuindo-as para processos filhos.

Minha esperança é que, por fora, funcione assim.

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
    }
}

Para começar, montei um esqueleto para o módulo de solicitação em massa.

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!");
    }  
}

Então eu testo assim em um script de teste:

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

Eu esperava ver "olá a partir da solicitação em massa!" registrado quatro vezes (como de fato é). Para minha surpresa, também vejo "olá do test.js" quatro vezes. Claramente eu não entendo comocluster.fork() trabalho. É reexecutar todo o processo, não apenas a função que o chama pela primeira vez?

Em caso afirmativo, como usar o agrupamento em um módulo sem incomodar a pessoa que usa esse módulo com uma lógica confusa de processos múltiplos?

questionAnswers(2)

yourAnswerToTheQuestion