Home >Web Front-end >JS Tutorial >Child_process implements multiple processes in Node.js

Child_process implements multiple processes in Node.js

高洛峰
高洛峰Original
2016-12-26 09:14:541364browse

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);

The above example provides a Fibonacci sequence calculation service. Since this calculation is quite time-consuming and is single-threaded, only one can be processed when there are multiple requests at the same time. This can be solved through child_process.fork() Question

Here is an example quoted from the official website. Through this example, you can better understand the function of fork()

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; });

The result of executing the above code snippet:

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

The content of sub.js is as follows:

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

In The process object in the child process has a send() method, and it will publish a message object every time it receives a message. What is a bit confusing is that the message sent by child.send() is received by the process.on() method. , the message sent by the process.send() method is received by the child.on() method

Referring to this example, we can improve the first service that provides Fibonacci data so that each request has a separate A new process to process

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);

fibonacci-calc.js

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)});
});

After starting the service, visit http://localhost:8080/9 to calculate the value of the Fibonacci sequence of 9

That’s it for this article That’s all. I hope you all like it.

For more articles related to the multi-process implementation of child_process in Node.js, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:JSONP implementationNext article:JSONP implementation