java 带宽控制_如何使用Java netty正确限制带宽使用?
對于我使用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 /秒.
所以我在這種情況下的問題是:我可以看到流量整形器正在做某事,但不是我想要的.我在這里錯過了什么,例如管道初始化中的任何步驟?
在此先感謝您的幫助!
總結
以上是生活随笔為你收集整理的java 带宽控制_如何使用Java netty正确限制带宽使用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql查看已打开文件数_MySQL如
- 下一篇: get mysql options_my