zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    怎樣在不同DB環境生成其它DB的存儲過程
    XML之sql:column用法对性能影响
    XML之sql:variable性能比较
    环回链接服务器
    动态列名数据视图实现
    一起学习win8应用1构建我们的第一个应用
    linux 限制root SSH登陆和限制su
    nginx 直接在配置文章中设置日志分割
    linux建立ssh信任关系
    linux系统meminfo详解(待补充)
  • 原文地址:https://www.cnblogs.com/yzpweber/p/6563902.html
Copyright © 2011-2022 走看看