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

  • 相关阅读:
    Code Reading chap2
    Code Reading chap4
    Code Reading chap6
    常用的一些sql基础语句汇总
    20170322、Linux常用命令汇总
    在windows上部署使用Redis
    20170322、php基础语法
    20170822、在Linux上部署使用Redis
    Linux安装配置SVN服务器
    Linux安装配置MySQL
  • 原文地址:https://www.cnblogs.com/yzpweber/p/6563902.html
Copyright © 2020-2023  润新知