微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Node.js中处理多个并行HTTP请求

我知道Node是非阻塞的,但我只意识到http.listen(8000)的认行为意味着所有HTTP请求都是一次处理的.我知道我不应该对此感到惊讶(这是端口如何工作),但它确实令我非常想知道如何编写我的代码,以便我可以处理多个并行的HTTP请求.

那么编写服务器的最佳方法是什么,因为它不会导致端口80和长时间运行的响应不会导致长请求队列?

为了说明问题,请尝试运行下面的代码并将其加载到两个浏览器选项卡中.

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 ms超时,然后发送响应.每个客户端将在几秒钟内获得约4000个响应.在该setTimeout(和任何I / O操作期间)节点可以继续处理.这包括接受额外的TCP连接.我测试了你的代码,浏览器在4秒内得到响应.第二个不要8秒,如果这是你认为它的工作.

我通过键盘尽可能快地在4个选项卡中运行curl -s localhost:8080,时间戳中的秒数是:

> 54至58
> 54至58
> 55至59
> 56至00

这里没有问题,虽然我可以理解你如何认为有一个.如果您的帖子建议工作,节点将被完全破坏.

这是另一种验证方式:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐