我正在尝试简单的 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
};
};
不是异步的实际上阻塞了节点主线程。因此,所有其他请求都必须等到这么大for
循环将结束。
为了并行进行一些繁重的计算,我建议使用setTimeout
or setInterval
实现您的目标:
var i=0;
var interval = setInterval(function() {
if(i++>=999999999){
clearInterval(interval);
}
//do stuff here
},5);
有关更多信息,我建议搜索“Node.js 事件循环”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)