[英]How control the flow of http streaming in node.js with piping
如Node.js開發人員所知,node可以將流流通過管道傳遞到其他資源,例如http響應。
http.createServer(function (req, res) {
stream = fs.createReadStream(filename);
stream.pipe(res);
});
還有另一種無需管道即可控制流和緩沖區響應流的方法
http.createServer(function (req, res) {
stream = fs.createReadStream(filename);
stream.on('data', function(data) {
if (res.write(data) == false){
stream.pause();
}
});
stream.on('end', function(data) {
res.end();
});
res.on('drain', function(data) {
stream.resume();
});
});
我認為這更好,因為我們可以控制流到http響應的流。 當響應緩沖區已滿並且流無法寫入數據時,流將暫停,並且當響應變為耗盡時,流將恢復
當我使用解決方案#2時,我的節點應用程序將停止運行,而不響應其他客戶端。 這意味着它一次只能為一個客戶提供服務! 我認為會出現此問題,因為節點正在等待將res.end()
發送給客戶端並結束響應。 但是我不知道如何解決這個問題。
如果此解決方案絕對是錯誤的,而我只需要使用stream.pipe()
請告訴我如何使用resume
和pause
功能控制管道的流向
解決方案#1基本等效於#2,只是它的代碼較短,並且您不必擔心背壓細節。
如果您的服務器在寫入數據時阻止了其他客戶端,則其他地方有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.