美文网首页
nodejs stream

nodejs stream

作者: RickyWu585 | 来源:发表于2022-02-22 09:30 被阅读0次

为什么需要stream

  • 不用stream的情况:太耗内存
const fs = require('fs')
const http = require('http')

const server = http.createServer()
server.on('request',(request,response)=>{
  fs.readFile('./big_file.txt',(error,data)=>{
    if(error)throw error
    response.end(data)
    console.log('done')
  })
})
server.listen(8888)
  • 优化:用pipe连接读文件流http可写流
    image.png
const fs = require('fs')
const http = require('http')

const server = http.createServer()
server.on('request',(request,response)=>{
  const stream = fs.createReadStream('./big_file.txt')
  stream.pipe(response)
  stream.on('end',()=>console.log('done'))
})
server.listen(8888)
  • 管道等同于以下事件:


    image.png
  • stream其实是个事件,可读流有data,end等事件,data事件回调参数chunk二进制buffer,如果想要转译的话,用toString()

const fs = require('fs')
const http = require('http')

const server = http.createServer()
server.on('request',(request,response)=>{
  const stream = fs.createReadStream('./big_file.txt')
  stream.on('data',(chunk)=>{
    console.log('读取了一次数据')
    console.log(chunk.toString())
  })
  stream.on('end',()=>{
    console.log('全部读取完了')
  })
})
server.listen(8888)

stream分类:

  • Readable:可读
  • Writable:可写
  • Duplex:可读可写(双向)
  • Transform:可读可写(变化),例如babel,scss转译等

Readable Stream:

  • 静止态paused和流动态flowing
  • 默认处于paused
  • 添加data事件监听,就变成flowing
  • 删掉data事件监听,就变成paused
  • pause()可以将它变为paused
  • resume()可以将它变为flowing

Writable Stream:

  • drain事件:
    调用stream.write(chunk)可能会得到false,表示数据积压了,这时就不能再write了,要监听drain事件,等drain事件触发了即数据不积压了,才能继续write

相关文章

  • [读] NodeJS stream 一:Buffer

    NodeJS stream 一:Buffer

  • nodejs stream

    参考 nodejs stream 手册英文原版stream-handbook Streams come to us...

  • Stream in Nodejs

    reference: https://nodesource.com/blog/understanding-stre...

  • Nodejs Stream

    前言 前端工程领域中使用Nodejs处处掣肘,原因无非是Nodejs中困难部分:文件和网络。而文件和网络都依赖一个...

  • nodejs stream

    为什么需要stream 不用stream的情况:太耗内存 优化:用pipe连接读文件流和http可写流:image...

  • improve scheme

    Nodejs Stream: https://nodesource.com/blog/understanding-...

  • 2.nodejs通过stream方式加载页面 / 通过fs模块加

    nodejs通过stream方式加载页面(stream方式加载优化性能) 配置index.js文件,创建服务,设置...

  • nodejs--stream

    Stream是一个抽象接口,非常重要,应用广泛,通过流接口可以实现一些磁盘文件读写,套字节,http请求交互等。 ...

  • Nodejs Stream 手册

    编译地址:https://github.com/substack/stream-handbook译者:jabez1...

  • Nodejs Stream 初识

    linux文件 为了区别不同文件类型,会有一个type来进行区别普通文件:包含任意数据目录: 相关一组文件的索引套...

网友评论

      本文标题:nodejs stream

      本文链接:https://www.haomeiwen.com/subject/gjgvkrtx.html