Nodejs 的 stream 使用指南

使用 Stream

当我们读取一个文件内容时,可能会这么写:

var http = require('http');
var fs = require('fs');
var server = http.createServer(function (req, res) {
    fs.readFile(__dirname + '/data.txt', function (err, data) {
        res.end(data);
    });
});
server.listen(8000);

当这个文件 data.txt 非常大时,不仅会占满内存,而且对于网络不好的用户而言体验将非常差。

好在 req 和 res 都是 Stream 对象,我们可以使用 Stream 的方式来写代码:

var http = require('http');
var fs = require('fs');
var server = http.createServer(function (req, res) {
    var stream = fs.createReadStream(__dirname + '/data.txt');
    stream.pipe(res);
});
server.listen(8000);

我们使用 fs.createReadStream 创建了一个 Stream 对象,.pipe() 方法会监听对应的 dataend 事件。

使用 Stream 的好处在于,我们将 data.txt 分段(chunk)传输到客户端,减轻了网络带宽的压力。

阅读全文