Heim  >  Artikel  >  Web-Frontend  >  Child_process implementiert mehrere Prozesse in Node.js

Child_process implementiert mehrere Prozesse in Node.js

高洛峰
高洛峰Original
2016-12-26 09:14:541339Durchsuche

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(&#39;child_process&#39;);
var n = cp.fork(__dirname + &#39;/sub.js&#39;);
n.on(&#39;message&#39;, function(m) {
  console.log(&#39;PARENT got message:&#39;, m);
});
n.send({ hello: &#39;world&#39; });

Das Ergebnis der oben genannten Ausführung Codeausschnitt:

PARENT got message: { foo: &#39;bar&#39; }
CHILD got message: { hello: &#39;world&#39; }

Der Inhalt von sub.js ist wie folgt:

process.on(&#39;message&#39;, function(m) {
  console.log(&#39;CHILD got message:&#39;, m);
});
process.send({ foo: &#39;bar&#39; });

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.js
var http = require(&#39;http&#39;);
var cp = require(&#39;child_process&#39;);
var server = http.createServer(function(req, res) {
    var child = cp.fork(__dirname + &#39;/fibonacci-calc.js&#39;);//每个请求都单独生成一个新的子进程
    child.on(&#39;message&#39;, function(m) {
        res.end(m.result + &#39;\n&#39;);
    });
    var input = parseInt(req.url.substring(1));
    child.send({input : input});
});
server.listen(8000);

Besuchen Sie nach dem Starten des Dienstes http://localhost:8080/9, um den Wert der Fibonacci-Folge von 9 zu berechnen
function fib(n) {
    if (n < 2) {
        return 1;
    } else {
        return fib(n - 2) + fib(n - 1);
    }
}
process.on(&#39;message&#39;, 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:JSONP-ImplementierungNächster Artikel:JSONP-Implementierung