Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to avoid blocking main thread in node.js?

Tags:

node.js

When writing a web server application with node.js it is of course very important to never block the main thread. But what if a server request needs to do calculations that will take some time to complete?

Will doing a

setTimeout(myCalculationFunc(), 0);

be the best way of keeping the server responding to other requests?

like image 600
Fredrik Wallenius Avatar asked Aug 02 '11 12:08

Fredrik Wallenius


1 Answers

I created as simple example using child_process to do heavy calculating if you would like to use it.

You can do it like this:

var http = require("http"),
exec = require("child_process").exec;

http.createServer(function(request, response) {
    var endvalue;
    request.on('data',
    function(data) {
        endvalue = data;
    });
    request.on('end',
    function() {
        exec("node calculate.js "+endvalue,
            function (error, stdout, stderr) {
              response.writeHead(200, {"Content-Type": "text/plain"});
              response.write(stdout);
              response.end();
            });
    });
}).listen(8080);

Calculate.js:

var endvalue = process.argv[2];
    for (i=0;i<=endvalue;i=i+1)
    {
        //just keeping it busy
    }
console.log("FINISHED USING ENDVALUE: "+endvalue);
like image 123
Marcus Granström Avatar answered Oct 25 '22 00:10

Marcus Granström