【问题标题】:Can a Client "await" for a stream from a Server?客户端可以“等待”来自服务器的流吗?
【发布时间】:2019-11-26 14:30:13
【问题描述】:

我有一个基本的 node.js 服务器,其唯一目的是为单个 .txt 文件提供服务,例如模拟 API。目前我正在使用流将文件“管道”到客户端,因为文件很大,我想逐块提供它,因为文件可以是 1GB 大并粉碎我的 RAM。

server.on('request', (req, res) => {
  const src = fs.createReadStream('./test.txt');
  src.pipe(res);
});

客户端只是执行 fetch() 请求。

我现在的问题: 有没有办法在客户端“等待”类似于承诺的流?我看到将流包装成一个承诺,但我仍然需要等待流完成读取并立即发送整个文件?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    您可能正在寻找:

    let fs = require('fs'),
    
    server.on('request', (req, res) => {
      const src = fs.createReadStream('./test.txt');
    
      const reader = fs.createReadStream('README.md', {
        // Some aditional options
        //flag: 'a+',
        //encoding: 'ascii',
        //start: 0,
        //end: 64,
        //highWaterMark: 16 // Chunk size
      });
    
      reader.on('data', chunk => {
        console.log('chunk has been sent');
        res.write(chunk);
      });
    
      reader.on('end', chunk => {
        console.log('End');
        res.end();
      });
    });
    

    指定块的大小,然后在多个响应中发送它,直到您的文件被读取。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多