对于我使用netty nio lib在 Java中开发的下载客户端,我还实现了带宽限制功能.从技术上讲,我是通过GlobalTrafficShapingHandler对象完成的.基于这个类’JavaDoc我初始化nio客户端管道如下:
...
trafficHandler = new GlobalTrafficShapingHandler(
        new HashedWheelTimer(),1000);
execHandler = new ExecutionHandler(
        new OrderedMemoryAwareThreadPoolExecutor(20,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 /秒.

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

在此先感谢您的帮助!

解决方法

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

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

如何使用Java netty正确限制带宽使用?的更多相关文章

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. js中‘!.’是什么意思

  3. InnoDB 和 MyISAM 引擎恢复数据库,使用 .frm、.ibd文件恢复数据库

  4. Error: Cannot find module ‘node:util‘问题解决

    控制台 安装 Vue-Cli 最后一步出现 Error: Cannot find module 'node:util' 问题解决方案1.问题C:\Windows\System32>cnpm install -g @vue/cli@4.0.3internal/modules/cjs/loader.js:638 throw err; &nbs

  5. yarn的安装和使用(全网最详细)

    一、yarn的简介:Yarn是facebook发布的一款取代npm的包管理工具。二、yarn的特点:速度超快。Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。超级安全。在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。超级可靠。使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。三、y

  6. 前端环境 本机可切换node多版本 问题源头是node使用的高版本

    前言投降投降 重头再来 重装环境 也就分分钟的事 偏要折腾 这下好了1天了 还没折腾出来问题的源头是node 使用的高版本 方案那就用 本机可切换多版本最终问题是因为nodejs的版本太高,导致的node-sass不兼容问题,我的node是v16.14.0的版本,项目中用了"node-sass": "^4.7.2"版本,无法匹配当前的node版本根据文章的提

  7. 宝塔Linux的FTP连接不上的解决方法

    宝塔Linux的FTP连接不上的解决方法常见的几个可能,建议先排查。1.注意内网IP和外网IP2.检查ftp服务是否启动 (面板首页即可看到)3.检查防火墙20端口 ftp 21端口及被动端口39000 - 40000是否放行 (如是腾讯云/阿里云等还需检查安全组)4.是否主动/被动模式都不能连接5.新建一个用户看是否能连接6.修改ftp配置文件 将ForcePassiveIP前面的#去掉 将19

  8. 扩展element-ui el-upload组件,实现复制粘贴上传图片文件,带图片预览功能

  9. 微信小程序canvas实现水平、垂直居中效果

    这篇文章主要介绍了小程序中canvas实现水平、垂直居中效果,本文图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  10. 使用HTML5做的导航条详细步骤

    这篇文章主要介绍了用HTML5做的导航条详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. java – Netty增加ChannelBuffer大小

    您好我有一个NettyServer,其处理程序应该接受字符串.它似乎只接收最多1024个字节的内容.如何增加缓冲区大小.我已经尝试过了没有成功.处理程序如下}解决方法你在使用UDP吗?

  2. java – 使用SPDY和Netty

    此外,当服务器不支持SPDY并且通道回退到标准SSL连接时,该功能如何?

  3. java – Linux机器上Netty 4.1的性能调优

    我正在使用Netty4.1Beta3构建一个消息传递应用程序来设计我的服务器,并且服务器理解MQTT协议.这是我的MqttServer.java类,它设置Netty服务器并将其绑定到特定端口.现在,我在Mac上对我的应用程序进行了负载测试,具有以下配置网络性能非常出色.在执行我的代码时我查看了jstack,发现nettyNIO产生了大约19个线程,并且它们似乎都没有等待等待通道或其他东西.然后我在

  4. 如何使用Java netty正确限制带宽使用?

    在此先感谢您的帮助!

  5. java – Netty 4多客户端

    我需要使客户端能够进行很多连接.我使用Netty4.0.不幸的是,所有现有的示例都不显示如何创建大量的连接.这是正确的决定吗?

  6. 如果JVM GC仍然存在,为什么需要手动处理Netty ByteBuf的引用计数?

    根据NettyinActionv10的说法,引用计数用于处理ByteBuf的汇总.但是JVM不知道netty引用计数,所以JVM仍然可以使用ByteBuf.如果是这样,为什么还需要关心引用计数和手动调用release()方法?

返回
顶部