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, when there are multiple requests at the same time, only one can be processed. This can be solved by child_process.fork() This question
Here is an example from the official website, through which 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 child process, the process object has a send() method, and it will publish a message object every time it receives a message
What’s a little confusing is: the message sent by child.send() is received by the process.on() method, and 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 new process to handle
var http = require('http');
var cp = require('child_process');
var server = http.createServer(function(req, res) {
var child = cp.fork(__dirname '/fibonacci-calc.js');//Each request generates a new child process
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
The above is the entire content of this article, I hope you all like it.