【问题标题】:how to handle new requests after iswritable is false in netty?在netty中iswritable为false后如何处理新请求?
【发布时间】:2016-01-23 04:09:16
【问题描述】:

为了防止oom,我应该控制iswrite何时为false。那么遵循哪种解决方案最好呢?

(1) iswritable 为 false 后丢弃请求?

(2) 通过while(iswritable ==false)阻塞IO(worker)线程?

(3) 写入db/log,然后在空闲时间处理它们? (这个解决方案可能不适合我,因为我需要低延迟)

3ks

【问题讨论】:

    标签: java netty


    【解决方案1】:

    您应该在ChannelInboundHandler 实现中使用channelWritabilityChanged 方法,如下所示:

    • 查看 DiscardClientHandler 中的一个示例 here(在服务器端非常相似)(您不必使用流量整形)
    • 参见 API 手册here

    所以在简历中:

    您的处理程序应该尝试写入或直接测试可写状态,然后使用来自channelWritabilityChanged 的事件继续写入您需要发送的内容。

    请注意,如果您发送文件或块项目,您可以在管道中使用 ChunkedWriteHandler,然后使用一个对象来编写扩展 ChunkedInput 类(请参阅 API here)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 2020-06-11
      • 2015-02-18
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多