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);
L'exemple ci-dessus fournit un service de calcul de séquence de Fibonacci. Étant donné que ce calcul prend beaucoup de temps et est monothread, lorsqu'il y a plusieurs requêtes en même temps, une seule peut être traitée via child_process.fork(. ) Ce problème peut être résolu
Voici un exemple tiré du site officiel, à travers lequel vous pouvez mieux comprendre la fonction de fork()
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' });
Les résultats de l'exécution de l'extrait de code ci-dessus :
PARENT got message: { foo: 'bar' } CHILD got message: { hello: 'world' }
Le contenu de sub.js est le suivant :
process.on('message', function(m) { console.log('CHILD got message:', m); }); process.send({ foo: 'bar' });
Dans le sous-processus, l'objet processus a une méthode send(), et il publiera le message à chaque fois qu'il reçoit un message.
Ce qui est un peu déroutant, c'est que le message envoyé par child.send() est reçu par la méthode process.on(), et le message envoyé par process.send(). () est reçue par la méthode child.on()
En nous référant à cet exemple, nous pouvons améliorer le premier service qui fournit des données de Fibonacci afin que chaque requête ait un nouveau processus distinct à gérer
var 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);
fibonacci-calc.js
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)}); });
Après avoir démarré le service, visitez http://localhost:8080/9 pour calculer la valeur de la séquence de Fibonacci de 9
Le ci-dessus se trouve cet article. C'est tout. J'espère que vous l'aimerez tous.
Pour plus d'articles liés à l'implémentation multi-processus de child_process dans Node.js, veuillez faire attention au site Web PHP chinois !