【问题标题】:How to throttle netty server with slow client?如何使用慢速客户端限制 netty 服务器?
【发布时间】:2016-05-31 14:44:43
【问题描述】:

为了防止riemann 服务器在客户端未正确读取 ACK 时出现 OOME,我已实现 some logic 以在通道不可写时关闭通道,假设这是由于客户端未读取/确认数据包引起的足够快。

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

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

【问题讨论】:

标签: clojure netty riemann


【解决方案1】:

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

【讨论】:

  • 感谢您的建议,这是我的想法,但在这种特殊情况下,这似乎相当复杂,因为我需要处理一些逻辑才能知道哪些响应没有被写入。有没有办法丢弃输出缓冲区中的响应?最后恐怕没有切实可行的解决方案来解决我想做的事情......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 2013-06-24
  • 1970-01-01
相关资源
最近更新 更多