如何处理Node.js中的多个并行HTTP请求?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (49)

我知道Node是非阻塞的,但默认http.listen(8000)意味着所有的HTTP请求都是一次处理的。我想知道如何编写我的代码,以便我可以处理多个并行的HTTP请求。

为了说明问题,运行下面的代码,并同时在两个浏览器选项卡中加载。

var http = require('http');
http.createServer(function (req, res) {
    res.setHeader('Content-Type', 'text/html; charset=utf-8');
    res.write("<p>" + new Date().toString() + ": starting response");
    setTimeout(function () {
        res.write("<p>" + new Date().toString() + ": completing response and closing connection</p>");
        res.end();
    }, 4000);
}).listen(8080);
提问于
用户回答回答于

上面的代码可以接受来自数百或数千客户端的TCP连接,读取HTTP请求,然后等待你在那里4000毫秒的超时,然后发送响应。每个客户端都会在大约4000毫秒的时间内得到一个小数毫秒的响应。在setTimeout期间(以及任何I / O操作期间)节点都可以继续处理。这包括接受更多的TCP连接。我测试了你的代码和浏览器,每个都得到4秒响应。第二个不需要8s。

在4个标签中运行curl -s localhost:8080,时间戳中的秒数是:

  1. 54至58
  2. 54至58
  3. 55至59
  4. 56至00

这是另一种验证方法:

for i in 1 2 3 4 5 6 7 8 9 10; do curl -s localhost:8080 &;done                                                                                                                                                                       
用户回答回答于

你的代码可以接受多个连接,因为该进程是在setTimeout调用的回调函数中完成的。

扫码关注云+社区