Child_process implements multiple processes in Node.js

高洛峰
Release: 2016-12-26 09:14:54
Original
1231 people have browsed it

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);
Copy after login

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

The result of executing the above code snippet:

PARENT got message: { foo: 'bar' } CHILD got message: { hello: 'world' }
Copy after login

The content of sub.js is as follows:

process.on('message', function(m) { console.log('CHILD got message:', m); }); process.send({ foo: 'bar' });
Copy after login

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('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);
Copy after login

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)}); });
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!