Node Js 上的流式传输

问题描述 投票:0回答:3

Node js 中的学习流。我想知道当我们在 Node js 中有文件系统时,为什么我们在 Node js 中使用 Stream。

答案是将数据流式传播成碎片。并通过网络发送。

为此我们 Node js 提供了这个--> createReadStream(文件名).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'));

我很困惑,我在这里不使用流,但视频仍在流式传输。

node.js file server stream readfile
3个回答
0
投票

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


0
投票

这两个代码都是正确的,并将文件内容传输到网络。
他们对客户的行为方式完全相同。

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


0
投票

Node.js 中的流式处理通常指的是处理流式数据,例如以块的形式读取或写入大量数据,而不是一次将整个内容加载到内存中。 Node.js 提供了用于处理流的内置模块,这对于读写文件、处理 HTTP 请求和响应等任务非常有用。

以下是如何使用流读取文件并将其内容写入控制台的基本示例:

    const fs = require('fs');

const filePath = 'example.txt';

// Create a readable stream to read the file
const readableStream = fs.createReadStream(filePath, 'utf8');

// Set up event handlers for the stream
readableStream.on('data', (chunk) => {
    console.log('Received a chunk of data:');
    console.log(chunk);
});

readableStream.on('end', () => {
    console.log('End of stream');
});

readableStream.on('error', (error) => {
    console.error('An error occurred:', error);
});

在此示例中,使用 fs.createReadStream() 创建可读流。只要有数据块可用,就会发出“data”事件。读取整个文件时会发出 'end' 事件,如果读取过程中发生错误,则会发出 'error' 事件。

如果要创建可写流以将数据写入文件或其他目的地,可以使用 fs.createWriteStream() 或其他相关模块(例如,用于 HTTP 响应)。

请记住,Node.js 流也可以通过管道连接在一起。例如,您可以从一个流读取数据并将其写入另一个流,这对于复制文件或处理数据等任务非常有用,而无需将所有内容加载到内存中。

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.