我经常听说Streams2和旧流,但是Streams3是什么? It get mentioned in this talk by Thorsten Lorenz。
我在哪里可以读到它,Streams2和Streams3有什么区别。
在Google上进行搜索时,我也在Changelog of Node 0.11.5中看到了该搜索结果,
最佳答案
我会试一试,但是我可能错了。从未编写过Streams1(旧流)或Streams2,我可能不是正确回答这个问题的合适人选,但事情就这样了。似乎有Streams1 API仍在某种程度上保持不变。在Streams2中,有两种模式的流(传统)流和非流。简而言之,支持流动模式的垫片将消失。这是message that lead to the patch now called called Streams3,
不幸的是,要充分理解任何定义Streams3的描述,您需要首先了解Streams1和旧版流。
背景故事
首先,让我们看一下Node v0.10.25文档对这两种模式的评价,
Isaac Z. Schlueter said in November slides I dug up:
因此,似乎在streams1中,您将创建一个对象并对该对象调用.on('data', cb)
。这会将事件设置为触发,然后您就可以放任自流了。在Streams2内部,流具有缓冲区,您可以从这些流中显式地请求数据(使用`.read)。 Isaac继续指定在Streams2中向后兼容的工作方式,以保持Streams1(旧流)模块正常运行
因此,在Streams2中,对.pause()
或.resume()
的调用会触发填充。而且,应该吧?在Streams2中,您可以控制何时使用.read()
,并且不会捕获被扔给您的东西。这触发了独立于Streams2的旧模式。
让我们以艾萨克的幻灯片为例,
createServer(function(q,s) {
// ADVISORY only!
q.pause()
session(q, function(ses) {
q.on('data', handler)
q.resume()
})
})
q
立即启动以读取和发出(可能会丢失数据),直到对q.pause
的调用建议q
停止拉入数据,但不要发出事件来清除已读取的内容。 q
开始暂停,直到调用.pause()
表示模拟旧模式为止。 q
从没有读过文件句柄开始就处于暂停状态,从而使q.pause()
成为noop,并且在调用q.on('data', cb)
时将调用q.resume
,直到缓冲区中没有更多数据为止。然后,再次调用q.resume
做同样的事情。 关于node.js - Node.js中的Streams3是什么,它与Streams2有何不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21538812/