節點的文件表明,對於讀取數據流的新最好的辦法如下:在節點中讀取流的新方法是否會導致阻塞?
var readable = getReadableStreamSomehow();
readable.on('readable', function() {
var chunk;
while (null !== (chunk = readable.read())) {
console.log('got %d bytes of data', chunk.length);
}
});
對我來說這似乎導致阻塞while
循環。這意味着,如果節點通過讀取和發送文件來響應http請求,則在進行塊讀取之前,該進程將不得不阻止。
這不是阻止IO哪個node.js試圖避免?
因此,如果這是某種大文件上傳,在讀取文件時如何輕鬆防止阻塞很長一段時間。我知道'read'可以有一個大小的參數,但我不確定合理的大小是多少。 – Startec
大多數流的內部緩衝區的默認高水位標記是16KB。之後,背壓開始並向上遊發出信號以停止發送數據。由於操作系統在有數據可用時通知節點,因此不會阻塞,這會導致流緩衝區。然後按照示例中所示讀取該緩衝區的當前內容是非阻塞的,因爲該數據只在內存中。如果你想顯式地請求一定數量的字節,'read(n)'實際上是非常有用的。 – mscdex