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);
}
わかりました。基本的に、nettynioの機能は正常に高速に動作します。最大値を設定すると アプリケーションのダウンロード速度を見ると、帯域幅の使用量が実際に最大に制限されていることもわかります。レベル。を介してbandwithの使用状況を監視します
trafficHandler.getTrafficCounter().getLastReadThroughput();
ただし、残念ながら最大。私が監視する速度は、私が以前に設定した速度ではなく、近くでもありません。たとえば、私は元々(制限なしで)ダウンロード速度が約2000 kb / sで、上記のように制限を300 kb / sに設定しましたが、実際のダウンロード速度は700〜900kb/で変化します。 s。
したがって、この場合の私の問題は、トラフィックシェーパーが何かを実行していることを確認できますが、意図したとおりではありません。ここで何か、たとえばパイプラインの初期化のステップを見逃していませんか?
よろしくお願いします!