首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Java netty正确限制带宽的使用?

如何用Java netty正确限制带宽的使用?
EN

Stack Overflow用户
提问于 2013-01-21 06:20:49
回答 2查看 3.1K关注 0票数 7

对于我使用netty nio lib使用Java开发的下载客户端,我还实现了带宽限制特性。从技术上讲,我是通过GlobalTrafficShapingHandler对象做到这一点的。基于这个类的JavaDoc,我初始化nio客户端管道,如下所示:

代码语言:javascript
复制
...
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;
}

在运行时,我设置了最大值。下载速度通过

代码语言:javascript
复制
public void setDlSpeedLimit(long limit)
{
    if(limit < 0)
        return;

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

好的,所以基本上netty nio功能工作得又好又快。当我设置最大值时。下载速度在应用程序中,我也可以看到带宽使用确实被限制在最大值。关卡。我通过以下方式监控带宽使用情况

代码语言:javascript
复制
trafficHandler.getTrafficCounter().getLastReadThroughput();

然而,不幸的是。我监测的速度不是我之前设置的,甚至不是很接近。例如,我最初(无限制)的下载速度约为2000 kb/s,然后我如上所述将限制设置为300 kb/s,但实际的下载速度后来从700-900 kb/s变化。

所以我在这种情况下的问题是:我可以看到流量整形器正在做一些事情,但不是我想要的那样。我在这里漏掉了什么吗,比如管道初始化中的任何步骤?

提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-25 04:34:06

好的,所以似乎没有其他的想法了。

唯一对我有帮助的是将计时计数器增加到5-10秒。

干杯!

票数 0
EN

Stack Overflow用户

发布于 2013-01-21 07:08:50

每次请求新管道时,您的getPipeline()都会实例化GlobalTrafficShapingHandler。您应该只实例化一个,并在所有管道中重用它。对于其他类也是如此,比如HashedWheelTimer

Netty有相当多的类必须在管道之间共享。通常,文档中明确提到了这一点。您应该检查每个类的javadoc,并确保遵循它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14429998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档