node.js - NodeJS 中不同路径的并行请求 : long running path 1 is blocking other paths

标签 node.js

我正在尝试简单的 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 循环结束。

为了并行执行一些繁重的计算,我建议使用 setTimeoutsetInterval 来实现您的目标:

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/

相关文章:

javascript - 是否可以从网页运行 Node 脚本?

javascript - 类型错误 : Cannot read property 'body' of undefined after POST (MEAN)

javascript - Gulp多个src

node.js - 无需express.js即可获取域名

node.js - node.js 垃圾收集的时机

node.js - npm 串口获取输出以 react 组件

javascript - Express.js - 尝试从 mysql 提取数据时出错

node.js - 在 Node.js 跨平台中下载和解压缩文件的最简单方法?

mysql - 将 Mysql 与 Nodejs 和 Express 一起使用 (node-mysql)

javascript - angular.js "Hello World"应用程序无法正常工作