【发布时间】:2016-01-23 04:09:16
【问题描述】:
为了防止oom,我应该控制iswrite何时为false。那么遵循哪种解决方案最好呢?
(1) iswritable 为 false 后丢弃请求?
(2) 通过while(iswritable ==false)阻塞IO(worker)线程?
(3) 写入db/log,然后在空闲时间处理它们? (这个解决方案可能不适合我,因为我需要低延迟)
3ks
【问题讨论】:
为了防止oom,我应该控制iswrite何时为false。那么遵循哪种解决方案最好呢?
(1) iswritable 为 false 后丢弃请求?
(2) 通过while(iswritable ==false)阻塞IO(worker)线程?
(3) 写入db/log,然后在空闲时间处理它们? (这个解决方案可能不适合我,因为我需要低延迟)
3ks
【问题讨论】:
您应该在ChannelInboundHandler 实现中使用channelWritabilityChanged 方法,如下所示:
所以在简历中:
您的处理程序应该尝试写入或直接测试可写状态,然后使用来自channelWritabilityChanged 的事件继续写入您需要发送的内容。
请注意,如果您发送文件或块项目,您可以在管道中使用 ChunkedWriteHandler,然后使用一个对象来编写扩展 ChunkedInput 类(请参阅 API here)。
【讨论】: