点击上方蓝字关注我们
小编提示: 本文是由 ICBU 的谦行小哥哥出品,我们会持续发出极简 Node.js入门 教程,敬请期待哦,文中有比较多的演示代码建议横屏阅读
双工流就是同时实现了 Readable 和 Writable 的流,即可以作为上游生产数据,又可以作为下游消费数据,这样可以处于数据流动管道的中间部分,即
rs.pipe(rws1).pipe(rws2).pipe(rws3).pipe(ws);
在 NodeJS 中双工流常用的有两种
Duplex
Transform
实现Duplex
和 Readable、Writable 实现方法类似,实现 Duplex 流非常简单,但 Duplex 同时实现了 Readable 和 Writable, NodeJS 不支持多继承,所以我们需要继承 Duplex 类
继承 Duplex 类
实现 _read() 方法
实现 _write() 方法
相信看过前面章节后对 read()、write() 方法的实现不会陌生,和 Readable、Writable 完全一样
const Duplex = require('stream').Duplex;const myDuplex = new Duplex({
read(size) {
// ... }, write(chunk, encoding, callback) {
// ... }});
构造函数参数
Duplex 实例内同时包含可读流和可写流,在实例化 Duplex 类的时候可以传递几个参数
readableObjectMode : 可读流是否设置为 ObjectMode,默认 false
writableObjectMode : 可写流是否设置为 ObjectMode,默认 false
allowHalfOpen : 默认 true, 设置成 false 的话,当写入端结束的时,流会自动的结束读取端
小例子
了解了 Readable 和 Writable 之后看 Duplex 非常简单,直接用一个官网的例子
const Duplex = require('stream').Duplex;const kSource = Symbol('source');class MyDuplex extends Duplex