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('child_process'); var n = cp.fork(__dirname + '/sub.js'); n.on('message', function(m) { console.log('PARENT got message:', m); }); n.send({ hello: 'world' });
The result of executing the above code snippet:
PARENT got message: { foo: 'bar' } CHILD got message: { hello: 'world' }
The content of sub.js is as follows:
process.on('message', function(m) { console.log('CHILD got message:', m); }); process.send({ foo: 'bar' });
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);
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)}); });
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!