Heim > Web-Frontend > js-Tutorial > Hauptteil

Child_process implementiert mehrere Prozesse in Node.js

高洛峰
Freigeben: 2016-12-26 09:14:54
Original
1328 Leute haben es durchsucht

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);
Nach dem Login kopieren

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; });
Nach dem Login kopieren

Das Ergebnis der oben genannten Ausführung Codeausschnitt:

PARENT got message: { foo: &#39;bar&#39; }
CHILD got message: { hello: &#39;world&#39; }
Nach dem Login kopieren

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; });
Nach dem Login kopieren

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);
Nach dem Login kopieren

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)});
});
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage