单个请求上的阻塞操作是否会阻止所有其他请求开始?

时间:2013-04-15 00:41:56

标签: node.js

我刚开始阅读node.js初学者指南

http://www.nodebeginner.org

如果对单个请求的阻止操作阻止其他请求启动,我想知道是否有任何示例或方法可以直接体验。基本上我想打开两个不同的浏览器并从一个浏览器触发阻止操作,然后访问另一个浏览器并观察我被阻止,直到第一个请求完成。

此代码段也是

var http = require("http");
function onRequest(request, response) {
  response.write("Hello World");
  response.end();
}
http.createServer(onRequest).listen(8888);

onRequest函数是否应该接受参数?如果要调用它?

http.createServer(onRequest(request, response)).listen(8888);

1 个答案:

答案 0 :(得分:3)

对于标题中的问题,是的。你可以尝试一下这样的事情:

function onRequest(req, res) {
    if(req.url === '/block') {
        while(true) {}
    }else{
        res.end("Still accepting requests…");
    }
}

然后在一个浏览器中转到http://localhost:8888/block,在另一个浏览器中转到http://localhost:8888/。后一个请求不会产生回应。 (就此而言,第一个也不会。)

对于你的其他问题,不;您没有调用onRequest并将返回值传递给createServer,而是将函数本身传递给createServer

在JavaScript中,函数是第一类的,也就是说它们是一个像任何其他对象一样的对象:你可以将它们作为参数传递,将它们放在变量或其他对象中等等。如果你习惯了C你可以把它想象成一个函数指针,除了可能带有一个隐含的上下文参数以及它带来对其封闭的词法范围的变量的引用。