Also arbeite ich an einem Projekt in Node.js und ich möchte einige zusätzliche Threads öffnen, um die Verarbeitungslast effizienter zu behandeln. Aber ich verwende Klassen mit Funktionsdefinitionen, und wenn ich versuche, diese Objekte an den Worker-Thread zu senden, verschwinden die Funktionen, die im Objekt definiert sind, und mir bleiben nur die anderen Felder im Objekt übrig. Gibt es eine Möglichkeit, dem Arbeiter ein Objekt zu schicken und die Funktionen zu erhalten, damit sie im Arbeiter aufgerufen werden können?Node.js sendet ein Objekt mit Funktionsdefinitionen an Worker-Thread
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'
});
}
wow, das die Funktionalität des Clustermoduls wirklich einschränkt. Weißt du, ob es Pläne gibt, das zu Node.js hinzuzufügen? –
Diese Funktionalität steht im Gegensatz zur node.js-Architektur. Node.js Event-Loop funktioniert in einem einzigen Thread. Das Cluster-Modul startet nur neue Prozesse. Sie alle haben ihre eigene unabhängige Erinnerung. Die Implementierung von Multi-Thread-Architekturen muss Threads mit gemeinsamem Speicher und verwandten Mechanismen wie "Mutexe" und "Semaphoren" unterstützen. Dies ist nicht der Weg von node.js. –