我有异步数据源,我想给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
。如果_read
方法为空,并且数据最终在每个消息的基础上被推入读队列,我是否破坏了任何东西?
_read()
方法是用来通知你流可以处理更多的数据(例如,内部缓冲区还没有达到highWaterMark)。当然,您可以忽略它。
然而,你至少应该适当地处理反压:如果push()
返回false
,你应该停止按压,直到_read()
被调用或'drain'被释放。