位置: 编程技术 - 正文

Node.js中的流(Stream)介绍(node.js 流)

编辑:rootadmin

推荐整理分享Node.js中的流(Stream)介绍(node.js 流),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs文件流,node.js的流的作用,nodejs文件流,node.js的流的主要作用,node.js的流的作用,nodejs的流处理模块,nodejs的流处理模块,node.js的流的作用,内容如对您有帮助,希望把文章链接给更多的朋友!

什么是流?

说到流,就涉及到一个*nix的概念:管道——在*nix中,流在Shell中被实现为可以通过 |(管道符) 进行桥接的数据,一个进程的输出(stdout)可被直接作为下一个进程的输入(stdin)。

在Node中,流(Stream)的概念与之类似,代表一种数据流可供桥接的能力。

pipe

流化的精髓在于 .pipe()方法。可供桥接的能力,在于数据流的两端(上游/下游 或称为 读/写流)以一个 .pipe()方法进行桥接。

伪代码的表现形式为:

流的分类

这里并不打算讨论所谓的Node v0.4 之前的“经典”流。那么,流分为这么几类(皆为抽象接口:

1.stream.Readable 可读流(需要实现_read方法,关注点在于对数据流读取的细节2.stream.Writable 可写流(需要实现_write方法,关注点在于对数据流写入的细节3.stream.Duplex 可读/写流(需要实现以上两接口,关注点为以上两接口的细节4.stream.Transform 继承自Duplex(需要实现_transform方法,关注点在于对数据块的处理

简单来说:

1).pipe() 的拥有者一定具备 Readable 流(并不局限于)能力,它拥有 'readable'/'data'/'end'/'close'/'error' 一系列事件可供订阅,也提供 .read()/.pause()/.resume()等一系列方法供调用;2).pipe() 的参数一定具备Writable 流(并不局限于 )能力,它拥有 'drain'/'pipe'/'unpipe'/'error'/'finish' 事件可供访问,也提供 .write()/.end() 等一系列方法供调用

什么鬼

有没有一丝丝焦虑?别急,做为一个说人话的低级码工,我会把Stream掰开了和您扯一扯的。

Stream类,在 Node.js的源码 里,是这么定义的:

Node.js中的流(Stream)介绍(node.js 流)

可以看出,本质上,Stream是一个EventEmitter,那意味着它具备事件驱动的功能(.emit/.on...)。众所周知,“Node.js 就是基于V8的事件驱动平台”,实现了事件驱动的流式编程,具备了和Node一样的异步回调的特征。

比如在 Readable 流中,有一个 readable 事件,在一个暂停的只读流中,只要有数据块准备好可读时,它就会被发送给订阅者(Readable 流有哪些呢?express中的 req,ftp或者mutli-form上传组件的req.part,系统中的标准输入 process.stdin等)。有了readable 事件,我们可以做个处理shell 命令输出的分析器之类的工具:

这样调用:

对于 Readable 流,我们还可以订阅它的 data 和 end 事件,以获取数据块并在流枯竭时获得通知,如 经典socket示例 中那样:

Readable流状态的切换需要注意的是,Readable 流有两种状态:flowing mode(激流) 和 pause mode(暂停)。前者根本停不下来,谁被pipe上了就马上不停的给;后者会暂停,直到下游显式的调用 Stream.read() 请求才读取数据块。Readable 流初始化时是 pause mode的。

这两种状态可以互为切换的,其中,

有以下任一行为,pause 转 flowing:

1.对 Readable 流添加一个data事件订阅2.对 Readable 调用 .resume() 显式开启flowing3.调用 Readable 流的 .pipe(writable) ,桥接到一个 Writable 流上

有以下任一行为,flowing 转回 pause:

1.Readable 流还没有 pipe 到任何流上,可调 .pause() 暂停2.Readable 流已经 pipe 到了流上,需 remove 掉所有 data 事件订阅,并且调用 .unpipe()方法逐一解除与下游流的关系

妙用

结合流的异步特性,我可以写出这样的应用:直接将 用户A 的输出桥接到 用户B 的页面上输出:

用户B请求的时候:

参考

how to write node programs with streams: stream-handbook

Node.js 异步编程之 Callback介绍(一) Node.js基于JavaScript引擎v8,是单线程的。Node.js采用了与通常Web上的JavaScript异步编程的方式来处理会造成阻塞的I/O操作。在Node.js中读取文件、访问数据库

初识Node.js 先来简单介绍nodeJS我们知道JavaScript是运行在浏览器中的,浏览器为它提供了一个上下文(context),从而让JavaScript得以解析执行。nodeJS其实可以这么理解,

nodejs中实现sleep功能实例 nodejs最让人不爽的就是其单线程特性,很多事情没法做,对CPU密集型的场景,性能也不够强劲。很长一段时间,我想在javascript语言框架下寻求一些解决

标签: node.js 流

本文链接地址:https://www.jiuchutong.com/biancheng/378014.html 转载请保留说明!

上一篇:ubuntu下安装nodejs以及升级的办法(ubuntu下安装visual studio)

下一篇:Node.js 异步编程之 Callback介绍(一)(nodejs 异步任务队列)

  • 快递费包不包括送货上门
  • 没有发票先入账怎么办
  • 两处工资薪金所得
  • 无形资产开发阶段
  • 应付账款赊销率和周转率的区别
  • 冲账其他应付款
  • 手工做账流程图
  • 管理费抵扣如何计算
  • 代扣个税手续费返还怎么申请
  • 退休人员在企业兼职规规定
  • 当期未开票过收入,以后开票怎么做会计分录
  • 已认证的发票作废进项税转出账务处理
  • 会计账簿的定义及其作用
  • 一个季度发票开超出9万
  • 跨境税法
  • 保税区内企业出口
  • 企业盈利所得税交多少
  • 国债利息纳税调增还是减
  • 购销行为是什么
  • 采购与付款内部控制开题报告
  • 盘盈对应的入账科目
  • 简述资产的概念特征以及确认条件
  • 无票收入的账务怎么处理
  • 培训费没有发票怎么办
  • 劳务报酬怎么申报个税电子税务
  • 新版edge浏览器极速模式
  • 在建工程的二级明细的讲解
  • 其他所得是什么意思
  • 王者荣耀电脑版怎么键盘操作
  • 收到投资分红怎么做账务处理?
  • vagrant 安装centos7
  • php自定义字段
  • 应收账款怎么做会计分录
  • 解决烧心最快方法
  • 材料短缺计入
  • 长期股权投资会减值吗
  • phpwhile循环多维数组
  • 税务登记投资总额和注册资本一样吗
  • 投资担保公司的钱都去哪了
  • win11永久关闭桌面弹出广告
  • yolov5的使用
  • 体检费专票可以抵扣吗
  • 收回款项的会计处理分录
  • mysql内存使用详解
  • 国家税务总局纳税服务规范
  • 幼儿园伙食账目
  • 固定资产处置的会计科目
  • 小规模纳税人补开发票如何申报
  • 应收账款确认无法收回的会计处理
  • 研发费用加计扣除的条件
  • 企业清算处置固定资产
  • 权益性无形资产包括哪些?
  • 没有取得增值税发票
  • 小规模纳税人月销售额超过10万怎么交税
  • 到期不付款跟客户怎么说
  • 制造费用结转到哪个科目
  • 融资租入固定资产计提折旧吗
  • 会计信息质量特征哪个最重要
  • bios设置网卡开启
  • centos6.7防火墙
  • 口袋pe下载
  • slee81.exe - slee81是什么进程
  • xp系统无线网络连接怎么没有
  • ghost后恢复数据
  • windows xp桌面图标
  • “0x018b0b20”指令引用的“0×00000000”,该内存不能为“written”问题解决方法
  • centos怎么样
  • win8删除软件在哪里
  • linux find命令的使用
  • jquery validate表单内容怎么添加边框
  • 在shell命令行方式下,一行只能
  • 如何检测ip地址是否被占用
  • Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent错误的记录。
  • js实现拖拽元素改编顺序
  • 张江税务所地址
  • 税控盘怎么领用
  • 个人所得税完税证明图片
  • 多缴税款可以抵顶以后欠费的税款吗
  • 银行手续费所得税是否可以税前扣除
  • 甘肃税务政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设