NodeJS中的stream模块简介

为什么应该使用流?

在node中,i/o都是异步的,所以在和硬盘以及网络的交互过程中设计到传递回调函数的过程中。你之前可能会写出这样的代码:

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文件读入到内存中,然后再把结果返回给客户端。如果文件非常大,消耗内存,同时等待文件读入内存,用户体验不好。

使用流对象操作文件。

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

});

 

pipe()方法会自动监听data和end事件。上面的代码会将文件每一个小段数据都源源不断的发送到客户端。除此之外,pipe()方法还可以自动控制后台压力,以便客户端连接缓慢的时候node可以将尽可能少的缓存放到内存中。

使用流模块压缩数据

var http = require('http');

var fs = require('fs');

var oppressor = require('oppressor');

 

var server = http.createServer(function(req,res){

    var stream = fs.createReadStream(__dirname + '/data.txt');

    stream.pipe(oppressor(req)).pipe(res);

});

server.listen(8000);

posted on 2017-03-17 09:14  达克骑士  阅读(131)  评论(0)    收藏  举报

导航