Node.js中的Streams3是什么?它与Streams2有何不同?
我经常听说Streams2和古老的streams,但Streams3是什么 我在哪里可以读到它,Streams2和Streams3之间的区别是什么 在谷歌上搜索,我也看到了 流:简化流动、被动数据侦听(streams3)(isaacs)Node.js中的Streams3是什么?它与Streams2有何不同?,node.js,stream,Node.js,Stream,我经常听说Streams2和古老的streams,但Streams3是什么 我在哪里可以读到它,Streams2和Streams3之间的区别是什么 在谷歌上搜索,我也看到了 流:简化流动、被动数据侦听(streams3)(isaacs) 我要试一试,但我可能弄错了。我从来没有写过Streams1(旧流)或Streams2,我可能不是回答这个问题的合适人选,但现在我来回答。似乎在某种程度上仍然存在Streams1API。在Streams2中,有两种流模式:流动(传统)和非流动。简言之,支撑流动模式
我要试一试,但我可能弄错了。我从来没有写过Streams1(旧流)或Streams2,我可能不是回答这个问题的合适人选,但现在我来回答。似乎在某种程度上仍然存在Streams1API。在Streams2中,有两种流模式:流动(传统)和非流动。简言之,支撑流动模式的垫片正在消失。这是, 与streams2相同的API,但删除了Flow/old这一令人困惑的模式 模式开关
read()
并返回一些数据时,都会触发一个数据事件resume()
将使其重复调用read()。否则,就没有变化pause()
将使其停止反复调用read()
pipe(dest)
和on('data',fn)
将自动调用resume()
首先,让我们看一下节点V0.1025文档中关于这两种模式,
可读流有两种“模式”:流动模式和非流动模式。在流动模式下,数据从底层系统读取,并尽快提供给程序。在非流动模式下,必须显式调用stream.read()以取出数据块。- : 流程2- “吸溪”
- 调用read()从源中提取数据,而不是“数据”事件的溢出
- 解决(我们知道的)所有问题
- 新的数据流可以切换到旧模式,在旧模式下,它们会喷出“数据”
- 如果添加“数据”事件处理程序,或调用pause()或resume(),则切换
- 对现有测试进行最小的更改以保持诚实
.pause()
或.resume()
会触发垫片。而且,它应该,对吗?在Streams2中,您可以控制何时.read()
,并且不会捕捉到向您扔来的东西。这触发了独立于Streams2的传统模式
让我们以艾萨克的幻灯片为例
createServer(function(q,s) {
// ADVISORY only!
q.pause()
session(q, function(ses) {
q.on('data', handler)
q.resume()
})
})
- 在Streams1中,
立即开始读取和发出(可能丢失数据),直到调用q
建议q.pause
停止拉入数据,但不要发出事件以清除已读取的内容q
- 在Streams2中,
开始暂停,直到调用q
表示模拟旧模式.pause()
- 在Streams3中,
以暂停开始,因为从未从文件句柄读取使q
成为noop的文件句柄,并且在调用q.pause()
将调用q.on('data')时,cb
,直到缓冲区中没有更多数据。然后再次打电话给q.resume,做同样的事情q.resume
这里有一个缓存版本(于2020年8月访问):我认为您的第一个要点是错误的。调用read()根本不会触发事件,流仍处于暂停模式,您可以根据请求获取尽可能多的字节。仅向“data”事件添加处理程序即可将流切换到流动模式,您将开始获取数据事件,直到完成为止。引用的链接已失效。有关Stream1、2和3的精彩文章: