主文件从Node.js

时间:2018-03-18 21:52:22

标签: javascript node.js child-process

我正在使用cluster.fork()在Node.js中生成工作进程。当我突然开始遇到与我用来启动我的应用程序多次运行的main.js文件相关的奇怪错误时,我的应用程序正常运行。这是我的文件:

children.js

const cluster = require('cluster');
if (cluster.isMaster) {
    console.log('starting master')
    const spawnWorker = function () {
        let worker = cluster.fork();
        return worker
    }

    exports.spawn = function (cnt) {
        for (let i = 0; i < cnt; i++) {
            console.log('spawning worker.....')
            spawnWorker()
            console.log('worker spawned')
        }
    }
}
else {
    console.log('Worker activity')
}

main.js

console.log('Main called')
global.Children = require('./children');
Children.spawn(4)
console.log('Main Finished')

来自运行节点main.js的输出

Main called
starting master
spawning worker.....
worker spawned
spawning worker.....
worker spawned
spawning worker.....
worker spawned
spawning worker.....
Main called
Worker activity

在此之后,我得到一个类型错误,即Children.spawn不是一个函数,它表示Main Finished。

我的问题是,为什么我的main.js第二次被召唤?我只是想让它创建工作流程,这些流程将反过来监听事件并且&#34;停止&#34;打印后执行&#34; Main Finished&#34;。我感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

这是预期的行为,分叉的是整个过程,而不仅仅是您调用cluster.fork()的模块。工人从流程开始就开始执行;)

您的群集模块应该是您的主要入口点。

答案 1 :(得分:1)

感谢naholyr我发现如果我将这个片段添加到我的Master块中:

cluster.setupMaster({
        exec: require('path').resolve(__dirname, 'children'),
});

然后这些过程将按照我的意图运作。