var http = require('http'); function fib (n) { if (n < 2) { return 1; } else { return fib(n - 2) + fib(n - 1); } } var server = http.createServer(function (req, res) { var num = parseInt(req.url.substring(1), 10); res.writeHead(200); res.end(fib(num) + "\n"); }); server.listen(8000);
Das obige Beispiel stellt einen Fibonacci-Sequenzberechnungsdienst bereit. Da diese Berechnung ziemlich zeitaufwändig und Single-Threaded ist, kann bei mehreren Anfragen gleichzeitig nur eine über child_process.fork( verarbeitet werden. ) Dieses Problem kann gelöst werden
Hier ist ein Beispiel von der offiziellen Website. Anhand dieses Beispiels können Sie die Funktion von fork() besser verstehen
var cp = require('child_process'); var n = cp.fork(__dirname + '/sub.js'); n.on('message', function(m) { console.log('PARENT got message:', m); }); n.send({ hello: 'world' });
Das Ergebnis der oben genannten Ausführung Codeausschnitt:
PARENT got message: { foo: 'bar' } CHILD got message: { hello: 'world' }
Der Inhalt von sub.js ist wie folgt:
process.on('message', function(m) { console.log('CHILD got message:', m); }); process.send({ foo: 'bar' });
Im Unterprozess verfügt das Prozessobjekt über eine send()-Methode, und das wird auch so sein Veröffentlichen Sie das Nachrichtenobjekt jedes Mal, wenn es eine Nachricht empfängt. Was etwas verwirrend ist: Die von child.send() gesendete Nachricht wird von der Methode process.on() empfangen und die gesendete Nachricht vom Prozess Die Methode .send() wird von der Methode child.on() empfangen
Anhand dieses Beispiels können wir den ersten Dienst verbessern, der Fibonacci-Daten bereitstellt, sodass jede Anfrage einen separaten neuen Prozess zu verarbeiten hat
fibonacci-calc.jsvar http = require('http'); var cp = require('child_process'); var server = http.createServer(function(req, res) { var child = cp.fork(__dirname + '/fibonacci-calc.js');//每个请求都单独生成一个新的子进程 child.on('message', function(m) { res.end(m.result + '\n'); }); var input = parseInt(req.url.substring(1)); child.send({input : input}); }); server.listen(8000);
function fib(n) { if (n < 2) { return 1; } else { return fib(n - 2) + fib(n - 1); } } process.on('message', function(m) { process.send({result: fib(m.input)}); });
Das Obige ist dieser Artikel. Das ist alles. Ich hoffe, er gefällt euch allen.
Weitere Artikel zur Multiprozess-Implementierung von child_process in Node.js finden Sie auf der chinesischen PHP-Website!