Node.js将带有函数定义的对象发送给工作线程

所以我在Node.js的一个项目中工作,我想打开一些额外的线程来更有效地处理处理负载。 但是我正在使用带有函数定义的类,当我尝试将这些对象发送给工作线程时,对象中定义的函数就消失了,我只剩下对象中的其他字段。 有没有办法给工人发送一个对象,并保留这些function,以便在工人内部调用它们?

var cluster = require('cluster'); if(cluster.isMaster){ Monster = function(species){ this.attack = function(){ console.log('CHOMP'); }; this.name = species; }; var vamp = new Monster('vampire'), worker = cluster.fork(); worker.send({'monster' : vamp}); } else{ process.on('message', function(msg) { console.log(msg.monster); //this logs "{ name: 'vampire' }" msg.monster.attack(); //TypeError: Object #<Object> has no method 'attack' }); } 

不,线程之间没有办法传递函数。 您只能传递JS普通对象(仅限数据),并使用当前线程中定义的函数(如使用接收数据创build新对象)来处理它。

查理,一年前我意识到你问了这个问题,但是我想要做一些非常类似的事情,我遇到了你没有给出答案的问题。 我以为我会采取一个“刺”,并告诉你我的代码已经做了什么。 这种组织代码的方式对我来说是一个非常可以接受的解决方法,在我的node.js工作中。 我相当肯定,这给了你一个方法来实现你想要的,即使你不能以你想要的方式去做。

在集群代码之外声明你的“类”,如下所示:

 var cluster = require('cluster'); var Monster = function(species){ this.attack = function(){ console.log('CHOMP!'); }; this.die = function() { console.log("Oh, what did I eat? I don't feel so good....\r\n"); process.exit(0); }; this.scare = function() { console.log("BOO! I am a " + this.name + "!"); }; this.name = species; }; if(cluster.isMaster){ worker = cluster.fork(); worker.send({'species' : 'Vampire'}); } else{ process.on('message', function(msg) { if(typeof msg.species !== "undefined") { myMonster = new Monster(msg.species); myMonster.scare(); myMonster.attack(); myMonster.die(); } }); } 

给一个旋转,看看这是否可以接受的答案!