2

为了防止客户端无法正确读取 ACK 时在riemann服务器中出现 OOME,我已经实现了一些逻辑来在通道变得不可写时关闭通道,假设这是由于客户端没有足够快地读取/ACKing 数据包引起的。

但是,这也会在发送大查询结果时关闭通道,可能是因为服务器尝试写入结果的速度比通过 TCP 发送的速度快。在我的脑海中,我认为处理这种情况的最佳方法是使用WriteTimeoutHandler设置一些写入超时。

在netty中是否有一些已知的标准模式来处理这种情况?

4

1 回答 1

1

基本上,一旦Channel.isWritable()返回 false,您将停止写入,并在再次返回 true 时重新开始。您可以通过覆盖来通知此更新ChannelInboundHandler.channelWritabilityChanged(...)

于 2016-05-31T06:44:43.923 回答