使用Netty按百分比调整服务器带宽

时间:2016-10-05 17:24:35

标签: java netty

是否可以使用Netty限制服务器的全局或通道带宽?

我可以通过GlobalChannelTrafficShapingHandler设置显式读取或写入速率限制,但我试图将服务器的全局带宽限制为可用带宽的大约一半。因此,如果服务器可以以8MB / s的速度上传,我想将上传限制在大约4MB / s。我希望服务器随着可用带宽的变化而调整;因此,如果服务器的上传速率降至5MB / s(可能是由于其他应用程序的网络利用率),那么我想将速率限制为2.5MB / s。

我一直在玩覆盖AbstractTrafficShapingHandler.submitWrite()并根据自上一次调用后的持续时间添加延迟,但逻辑似乎很脆弱且不可靠。

关于如何智能地解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:5)

您是否考虑过使用GlobalTrafficShapingHandler并定期让它全力以赴确定服务器最大带宽,然后将其限制为一半?

我会定期执行以下操作(按计划,可能每分钟1秒)

  • setReadLimit setWriteLimit增加到您允许的最大值
  • 使用GlobalTrafficShapingHandler s TrafficCounter(通过public trafficCounter())通过调用resetCumulativeTime重置计数
  • 确保TrafficCounter的间隔时间短于或等于您要采样的时间。使用TrafficCounter.configure(long)
  • 更改此设置
  • 对TrafficCounter进行采样以获取服务器最大带宽
  • 修改GlobalTrafficShapingHandler以使用刚刚计算的一半带宽

我认为上面应该给你你想要的东西,而不是太脆弱。