是否可以使用Netty限制服务器的全局或通道带宽?
我可以通过GlobalChannelTrafficShapingHandler设置显式读取或写入速率限制,但我试图将服务器的全局带宽限制为可用带宽的大约一半。因此,如果服务器可以以8MB / s的速度上传,我想将上传限制在大约4MB / s。我希望服务器随着可用带宽的变化而调整;因此,如果服务器的上传速率降至5MB / s(可能是由于其他应用程序的网络利用率),那么我想将速率限制为2.5MB / s。
我一直在玩覆盖AbstractTrafficShapingHandler.submitWrite()并根据自上一次调用后的持续时间添加延迟,但逻辑似乎很脆弱且不可靠。
关于如何智能地解决这个问题的任何想法?
答案 0 :(得分:5)
您是否考虑过使用GlobalTrafficShapingHandler
并定期让它全力以赴确定服务器最大带宽,然后将其限制为一半?
我会定期执行以下操作(按计划,可能每分钟1秒)
setReadLimit
setWriteLimit
增加到您允许的最大值GlobalTrafficShapingHandler
s TrafficCounter
(通过public trafficCounter()
)通过调用resetCumulativeTime
重置计数TrafficCounter.configure(long)
GlobalTrafficShapingHandler
以使用刚刚计算的一半带宽我认为上面应该给你你想要的东西,而不是太脆弱。