我正在尝试简单的 NodeJS 应用程序,这样我就可以理解异步的本质。
但我的问题是,一旦我从浏览器中点击“/home
”,它就会等待响应,同时当“/
”被点击时,它会等待“/home
"先响应,再响应"/
"请求。
我担心的是,如果其中一个请求需要大量处理,我们不能同时请求另一个请求吗?这是正确的吗?
app.get("/", function(request, response) {
console.log("/ invoked");
response.writeHead(200, {'Content-Type' : 'text/plain'});
response.write('Logged in! Welcome!');
response.end();
});
app.get("/home", function(request, response) {
console.log("/home invoked");
var obj = {
"fname" : "Dead",
"lname" : "Pool"
}
for (var i = 0; i < 999999999; i++) {
for (var i = 0; i < 2; i++) {
// BS
};
};
response.writeHead(200, {'Content-Type' : 'application/json'});
response.write(JSON.stringify(obj));
response.end();
});
最佳答案
好问题, 现在,尽管 Node.js 具有异步特性,但这段代码:
for (var i = 0; i < 999999999; i++) {
for (var i = 0; i < 2; i++) {
// BS
};
};
不是异步实际上阻塞了 Node 主线程。因此,所有其他请求必须等到这个大的 for
循环结束。
为了并行执行一些繁重的计算,我建议使用 setTimeout
或 setInterval
来实现您的目标:
var i=0;
var interval = setInterval(function() {
if(i++>=999999999){
clearInterval(interval);
}
//do stuff here
},5);
有关更多信息,我建议搜索“Node.js 事件循环”
关于node.js - NodeJS 中不同路径的并行请求 : long running path 1 is blocking other paths,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23719737/