0

我刚开始浏览 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);
4

1 回答 1

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,您可以认为它就像一个函数指针,除了可能带有一个隐含的上下文参数,以携带对其封闭词法范围的变量的引用。

于 2013-04-15T00:44:42.753 回答