我正在使用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;。我感谢任何帮助!
答案 0 :(得分:1)
这是预期的行为,分叉的是整个过程,而不仅仅是您调用cluster.fork()
的模块。工人从流程开始就开始执行;)
您的群集模块应该是您的主要入口点。
答案 1 :(得分:1)
感谢naholyr我发现如果我将这个片段添加到我的Master块中:
cluster.setupMaster({
exec: require('path').resolve(__dirname, 'children'),
});
然后这些过程将按照我的意图运作。