java 带宽控制_如何使用Java netty正确限制带宽使用?

对于我使用netty nio lib在

Java中开发的下载客户端,我还实现了带宽限制功能.从技术上讲,我是通过GlobalTrafficShapingHandler对象完成的.基于这个类’JavaDoc我初始化nio客户端管道如下:

...

trafficHandler = new GlobalTrafficShapingHandler(

new HashedWheelTimer(), 0, 0, 1000);

execHandler = new ExecutionHandler(

new OrderedMemoryAwareThreadPoolExecutor(20, 0, 0));

...

public ChannelPipeline getPipeline() throws Exception

{

// create default pipeline

ChannelPipeline pipeline = pipeline();

// traffic shaping handler

pipeline.addLast("global-traffic-shaping", trafficHandler);

// SSL support

if(useSSL)

{

SSLEngine sslEngine = createSSLEngine();

pipeline.addLast("ssl", new SslHandler(sslEngine));

}

// memory executor

pipeline.addLast("memory-executor", execHandler);

// business logic

pipeline.addLast("data-processing",

new NettyNioClientHandler(

nettyNioClient, localer, logger, ncMgr, username, useSSL));

return pipeline;

}

然后在运行时我设置最大值.通过下载速度

public void setDlSpeedLimit(long limit)

{

if(limit < 0)

return;

trafficHandler.configure(0, limit * 1000L);

}

好吧,所以基本上netty nio功能运行得很好而且速度很快.当我设置最大值.在应用程序中下载速度,我还可以看到带宽使用确实上限为最大值.水平.我监视带宽使用情况

trafficHandler.getTrafficCounter().getLastReadThroughput();

然而,不幸的是最大.速度我监控不是我之前设置的,甚至没有关闭.例如,我最初(没有限制)的下载速度约为2000 kb / s,然后我将限制设置为300 kb / s,如上所述,但实际下载速度则从700-900 kb /秒.

所以我在这种情况下的问题是:我可以看到流量整形器正在做某事,但不是我想要的.我在这里错过了什么,例如管道初始化中的任何步骤?

在此先感谢您的帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值