netty nio lib를 사용하여 Java로 개발 한 다운로드 클라이언트의 경우 대역폭 제한 기능도 구현했습니다. 엄밀히 말하면 GlobalTrafficShapingHandler 객체를 통해 처리합니다. 이 클래스의 JavaDoc을 기반으로 다음과 같이 nio 클라이언트 파이프 라인을 초기화합니다.Java netty로 대역폭 사용을 올바르게 제한하는 방법은 무엇입니까?
...
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;
}
그리고 런타임 중에 최대 값을 설정합니다. 다운로드 속도는
입니다. 따라서 기본적으로 netio nio 기능은 훌륭하고 빠르게 작동합니다. 최대치를 설정할 때. 응용 프로그램에서 다운로드 속도, 나는 또한 대역폭 사용량이 실제로 최대에서 모자를 볼 수 있습니다. 수평. 나는 대역폭 사용을 모니터한다 :
trafficHandler.getTrafficCounter().getLastReadThroughput();
그러나, 불행하게도 최대. 내가 모니터 한 속도는 이전에 설정 한 것, 심지어 닫히지 않은 것입니다. 예를 들어, 원래 (제한 없음) 다운로드 속도는 약 2000kb/s입니다. 그런 다음 위에서 설명한대로 300kb/s로 제한을 설정했지만 실제 다운로드 속도는 700-900kb/에스.
이 경우 내 문제는 다음과 같습니다. 트래픽 셰이퍼가 뭔가를하고 있지만 원하는대로 볼 수 없습니다. 여기서 예를 들어 파이프 라인 초기화의 단계를 놓치고 있습니까?
미리 도움 주셔서 감사합니다.
물론 당신은 내 코드에서 제안한대로 실제로했습니다. GlobalTrafficShapingHandler, HashedWheelTimer 및 ExecutionHandler는 클래스 생성자에서 전에 만들어집니다. 미안 원래 게시물이 당신을 혼란스럽게했다면. 그에 맞게 업데이트했습니다. – Matthias