我有异步数据源我想提供stream.Readable
接口。但是,此数据源没有“阅读”的概念。从它 - 当我有数据时,我只收到一个事件,没有保留缓冲区。
那么,使用以下实现有什么缺点吗?
stream = require 'stream'
class Wrapper extends stream.Readable
constructor: (@resource) ->
# call stream.Readable constructor
super
# when message from resource arrives
@resource.on 'message', (message) =>
# just push it into read queue
@push message
# when resource is closed
@resource.on 'close', =>
# indicate there will be nothing more to read
@push null
_read: (size) ->
# no-op
E.g。如果_read
方法为空,并且数据最终会按消息推送到读取队列中,我是否会破坏任何内容?
答案 0 :(得分:1)
_read()
方法用于通知您流可以处理更多数据(例如内部缓冲区尚未击中highWaterMark)。当然,你可以自由地忽略它。
但是你应该至少适当地处理背压:如果push()
返回false
,你应该停止推动,直到_read()
被召唤或者排出&#39}。被发射出来。