Skip to content

Commit 23b408a

Browse files
committed
add
1 parent 1418c2b commit 23b408a

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

企业级/流.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,36 @@ highWaterMark 选项是阈值,而不是限制:它规定了流在停止请求
5151

5252
由于 Duplex 和 Transform 流都是 Readable 和 Writable,因此每个流都维护两个独立的内部缓冲区,用于读取和写入,允许每一端独立操作,同时保持适当且高效的数据流。 例如,net.Socket 实例是 Duplex 流,其 Readable 端允许消费从套接字接收的数据,其 Writable 端允许将数据写入套接字。 因为数据可能以比接收数据更快或更慢的速度写入套接字,所以每一端都应该独立于另一端进行操作(和缓冲)。
5353

54+
## Readable
55+
56+
可读流是对被消费的数据的来源的抽象。
57+
58+
Readable 流的示例包括:
59+
60+
客户端上的 HTTP 响应
61+
服务器上的 HTTP 请求
62+
文件系统读取流
63+
压缩流
64+
加密流
65+
TCP 套接字
66+
子进程的标准输出和标准错误
67+
process.stdin
68+
69+
所有的 Readable 流都实现了 stream.Readable 类定义的接口。
70+
71+
Readable 流以两种模式之一有效地运行:流动和暂停。在流动模式下,数据会自动从底层系统读取,并通过 EventEmitter 接口使用事件尽快提供给应用程序。在暂停模式下,必须显式调用 stream.read() 方法以从流中读取数据块。
72+
73+
所有的 Readable 流都以暂停模式开始,但可以通过以下方式之一切换到流动模式:
74+
75+
添加 data 事件句柄。
76+
调用 stream.resume() 方法。
77+
调用 stream.pipe() 方法将数据发送到 Writable。
78+
Readable 可以使用以下方法之一切换回暂停模式:
79+
80+
如果没有管道目标,则通过调用 stream.pause() 方法。
81+
如果有管道目标,则删除所有管道目标。 可以通过调用 stream.unpipe() 方法删除多个管道目标。
82+
83+
5484
## 流的类型
5585

5686
4种基本的流类型
@@ -565,3 +595,13 @@ write('hello', () => {
565595
console.log('完成写入')
566596
});
567597
```
598+
599+
600+
## 双工流与转换流
601+
602+
双工流(Duplex) 是同时实现了 Readable 和 Writable 接口的流。 双工流的例子包括 TCP socket、 zlib 流, crypto 流。
603+
604+
转换流(Transform) 是一种双工流,但它的输出与输入是 相关联的。与双工流一样,转换流也同时实现了 Readable 和 Writable 接口。转换流的例子包括 zlib流和crypto流。
605+
606+
## 实现双工流
607+

0 commit comments

Comments
 (0)