簡體   English   中英

如何通過管道控制node.js中的HTTP流的流

[英]How control the flow of http streaming in node.js with piping

如Node.js開發人員所知,node可以將流流通過管道傳遞到其他資源,例如http響應。

解決方案1

http.createServer(function (req, res) {
   stream = fs.createReadStream(filename);
   stream.pipe(res);
});

解決方案#2

還有另一種無需管道即可控制流和緩沖區響應流的方法

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();
    });


});

解決方案2優於#1嗎?

我認為這更好,因為我們可以控制流到http響應的流。 當響應緩沖區已滿並且流無法寫入數據時,流將暫停,並且當響應變為耗盡時,流將恢復

我的問題

當我使用解決方案#2時,我的節點應用程序將停止運行,而不響應其他客戶端。 這意味着它一次只能為一個客戶提供服務! 我認為會出現此問題,因為節點正在等待將res.end()發送給客戶端並結束響應。 但是我不知道如何解決這個問題。

如果此解決方案絕對是錯誤的,而我只需要使用stream.pipe()請告訴我如何使用resumepause功能控制管道的流向

解決方案#1基本等效於#2,只是它的代碼較短,並且您不必擔心背壓細節。

如果您的服務器在寫入數據時阻止了其他客戶端,則其他地方有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM