【发布时间】:2017-02-28 04:40:00
【问题描述】:
我试图了解 nodejs 在加载大量内容时的局限性。具体来说,我想知道流式传输对客户端的冗长响应是否会阻塞。
我创建了一个非常简单的测试设置,其中节点仅使用从 1GB http 下载中提取的流响应每个请求。这是我的代码:
var http = require('http');
var fs = require('fs');
var iterator = 0;
http.createServer(function(req, res) {
console.log('req received ', iterator++);
var url = 'http://download.thinkbroadband.com/1GB.zip';
http.get(url, bigFile => {
res.writeHead(200, {
'content-type': 'application/zip',
'content-length': bigFile.headers['content-length'],
});
bigFile.pipe(res);
});
}).listen(8003);
所以我启动了这个节点服务器,并在我的浏览器中使用多个选项卡点击了端点。有趣的是,后续响应不会立即使用console.log('request received ', iterator++); 代码记录。相反,在记录初始事件之前会有 5 到 10 秒的延迟。
这对我来说很奇怪,因为如果流式传输 http 响应被阻塞,那么它应该等到第一个请求完成后再接受第二个请求。如果流媒体没有阻塞,那么我希望看到所有请求在被请求后立即记录。
谁能解释一下?
我也很想听听这里关于性能的任何想法。 Node 可能并不是真正为这类事情而构建的。下载速度确实受到多个请求的影响。
【问题讨论】:
标签: node.js