使用node.js编写Web服务器应用程序时,永远不要阻塞主线程当然非常重要。但是,如果服务器请求需要进行需要一些时间才能完成的计算呢?
会做一个
setTimeout(myCalculationFunc(), 0);
是保持服务器响应其他请求的最佳方式吗?
答案 0 :(得分:4)
我创建了一个简单的例子,使用child_process进行大量计算,如果你想使用它。
你可以这样做:
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);
答案 1 :(得分:2)
但是,如果服务器请求需要进行需要一些时间才能完成的计算呢?
node.js
背后的整个想法是它没有做任何繁重的处理。任何繁重的处理都应由工人处理。
您需要尽快回到事件循环并生成进程或使用IO来完成繁重的工作。
实际的node.js服务器只需要将消息传递给您的所有服务,而不是执行任何这些服务。
答案 2 :(得分:1)