不在stream.Readable中实现_read的缺点

时间:2014-07-01 02:41:11

标签: javascript node.js stream coffeescript

我有异步数据源我想提供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方法为空,并且数据最终会按消息推送到读取队列中,我是否会破坏任何内容?

1 个答案:

答案 0 :(得分:1)

_read()方法用于通知您流可以处理更多数据(例如内部缓冲区尚未击中highWaterMark)。当然,你可以自由地忽略它。

但是你应该至少适当地处理背压:如果push()返回false,你应该停止推动,直到_read()被召唤或者排出&#39}。被发射出来。