问题超类stream.Duplex

时间:2017-04-04 00:49:08

标签: javascript node.js stream

我试图通过扩展stream.Readable来实现可读的流。

根据文档,我所要做的就是实现_read()。

我不明白在_read时我该做什么我没有数据,或者一旦我再次获得数据,如何触发另一个_read的调用。我没有在Readable中看到一个概念来处理缓慢或延迟传送的数据。我可以看到在调用pipe()函数后正在调用_read()。

如果在_read中的任何一点我没有数据,我必须返回而不传递,似乎再也不会调用_read。我准备在数据准备好后发出可读事件,但不会触发对_read的调用。

此问题不仅发生在启动时,而且可能在我的源需要时间传递时发生。 stream.Readable不支持慢速源吗?

1 个答案:

答案 0 :(得分:1)

_read()只是一个信号,可以让您知道可以/应该从您的上游源读取更多数据。当您向流push()数据push()并且false返回_read()时,这一点最为重要。发生这种情况时,在再次调用push()之前,不应再推送任何数据。

实际上并没有什么能阻止你随时推送任何数据量,但如果你不检查Readable&#,你最终可能会在内存中缓冲太多数据39; s返回值并据此采取行动。

此外,在继承/子类Readable时,您需要确保在流实例的上下文中调用超类构造函数(对于ES6类)或this构造函数({{1}在你自己的构造函数中(对于ES6之前的类/原型继承)(例如Readable.call(this, { /*Optional Readable settings*/ })