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

dej*_*now 7 java netty

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

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

我一直在玩OverRiding AbstractTrafficShapingHandler.submitWrite()并根据自上次调用以来的持续时间添加延迟,但逻辑看起来很脆弱且不可靠.

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

Chr*_*ole 5

您是否考虑过使用GlobalTrafficShapingHandler并定期让它全速运转以找出服务器的最大带宽,然后将其限制为最大带宽的一半?

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

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

我认为以上内容应该可以为您提供想要的东西,而又不要太脆弱。