java 带宽控制_如何使用Java netty正确限制带宽使用?
對(duì)于我使用netty nio lib在
Java中開(kāi)發(fā)的下載客戶(hù)端,我還實(shí)現(xiàn)了帶寬限制功能.從技術(shù)上講,我是通過(guò)GlobalTrafficShapingHandler對(duì)象完成的.基于這個(gè)類(lèi)’JavaDoc我初始化nio客戶(hù)端管道如下:
...
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;
}
然后在運(yùn)行時(shí)我設(shè)置最大值.通過(guò)下載速度
public void setDlSpeedLimit(long limit)
{
if(limit < 0)
return;
trafficHandler.configure(0,limit * 1000L);
}
好吧,所以基本上netty nio功能運(yùn)行得很好而且速度很快.當(dāng)我設(shè)置最大值.在應(yīng)用程序中下載速度,我還可以看到帶寬使用確實(shí)上限為最大值.水平.我監(jiān)視帶寬使用情況
trafficHandler.getTrafficCounter().getLastReadThroughput();
然而,不幸的是最大.速度我監(jiān)控不是我之前設(shè)置的,甚至沒(méi)有關(guān)閉.例如,我最初(沒(méi)有限制)的下載速度約為2000 kb / s,然后我將限制設(shè)置為300 kb / s,如上所述,但實(shí)際下載速度則從700-900 kb /秒.
所以我在這種情況下的問(wèn)題是:我可以看到流量整形器正在做某事,但不是我想要的.我在這里錯(cuò)過(guò)了什么,例如管道初始化中的任何步驟?
在此先感謝您的幫助!
總結(jié)
以上是生活随笔為你收集整理的java 带宽控制_如何使用Java netty正确限制带宽使用?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql查看已打开文件数_MySQL如
- 下一篇: java 补0_Java String字