我想了解在加載大量內容時nodejs的限制。具體而言,我想知道是否對客戶端進行長時間響應會阻止。是否流式傳輸http響應塊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響應被阻塞,那麼它應該等到第一個請求完成後再接受第二個請求。如果數據流不阻塞,那麼我希望在請求後立即看到所有請求記錄。
有人可以解釋這一點嗎?
我也很想聽聽關於表演的任何想法。節點可能並不是真的爲這種事情而構建的。下載速度確實受到多個請求的影響。