在节点Js上流式传输

时间:2019-06-17 07:57:15

标签: node.js file server stream readfile

在节点js中学习流。我想知道为什么在节点js中有文件系统时为什么要在节点js中使用Stream。

答案是将流传播的数据分成多个部分。并通过网络发送。

为此,我们节点js提供了此功能->         createReadStream(fileName).pipe(res);

我的工作节点Js流代码。

const { createServer } = require('http');
const { createReadStream } = require('fs');
const fs = require('fs');

const fileName = './pika.mp4';

createServer( (req,res) => {

res.writeHead(200, {
    'Content-Type': 'video/mp4'
});

createReadStream(fileName).pipe(res);

}).listen(3000, () => console.log('Server running - 3000'));

输出完美无问题,

问题是如果我不使用流并使用readFile或readFileSync 仍然我得到相同的输出。

代码->

const { createServer } = require('http');
const { createReadStream } = require('fs');
const fs = require('fs');

const fileName = './pika.mp4';

createServer( (req,res) => {

fs.readFile(fileName,(err,data) => {


res.writeHead(200, {
    'Content-Type': 'video/mp4'
});

res.write(data);

});

}).listen(3000, () => console.log('Server running - 3000'));

我很困惑,在视频流传输的情况下我仍不使用流传输。

2 个答案:

答案 0 :(得分:0)

您正在从fs模块读取视频文件。

答案 1 :(得分:0)

两个代码均正确,并将文件内容流式传输到网络。
它们对于客户端的行为完全相同。

但是,第二个将整个文件加载到内存中,然后再将数据发送到网络。
您应该偏爱第一种方法,因为它可以简单地将文件读取器的输出流“连接”到网络响应的输入流。