【问题标题】:How do dart streams handle back pressure and partial data?dart 流如何处理背压和部分数据?
【发布时间】:2021-06-02 17:08:01
【问题描述】:

我正在学习 dart,并尝试在 tcp 之上实现一个相当简单的协议。

首先,我无法在 dart 流中找到任何与背压相关的信息。 Google 只是展示了 RxDart,但我宁愿先在 core dart 中实现我的代码。

我如何告诉 tcp 流(或任何其他流)我的消费者太慢了。使用异步流,我将不断获得更新,并且在某个地方,一些缓冲区会变得越来越大。我的理解正确吗?

说到缓冲区,我有办法管理不包含完整消息(部分帧)的 tcp 数据包吗?我可以创建自己的缓冲区并填充它,但这意味着我正在冗余分配内存。是否有一些内部缓冲区,我可以在其中检查它的大小,如果它小于某个阈值,请将其保留在那里。如果我的消息是完整的,请阅读、处理并发送给下游消费者?

【问题讨论】:

    标签: dart tcp stream network-programming


    【解决方案1】:

    流上的侦听器可以随时暂停它,该流的源可以检测到这一点并暂停添加项目。流中的项目数可以用 .length 表示,但我不确定如果有数千个未读项目会发生什么。

    【讨论】:

    • 您不能使用length 来检查未读事件。使用length读取并丢弃事件,并且在流关闭之前不会完成(如果您已经听过一次流,则不能使用)。我会从流中获取事件并立即将它们放入我自己的Queue,然后根据该队列的大小处理背压(使用.pause())。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多