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

  • 相关阅读:
    [CAMCOCO][C#]我的系统架构.服务器端.(一)
    开博啦,加油!!
    Django RestFul framework Serializer序列化器的使用(定义)
    Django项目快速搭建
    Django简介
    python搭建虚拟环境
    大专生自学web前端前前后后
    实现资源国际化
    利用ajax实现页面动态修改
    七牛使用
  • 原文地址:https://www.cnblogs.com/yzpweber/p/6563902.html
Copyright © 2011-2022 走看看