2012-07-17 2 views
5

"receiveBufferSize"옵션을 1024로 설정했지만 어떤 이유로 인해 messageReaded에서 768 바이트 만 남았습니다. - receiveBufferSizePredictorFactory 당신은 추가 옵션을 설정해야합니다Netty가 UDP 메시지에서 768 바이트 만 제공하는 이유

public static void main(String[] args) throws Exception { 
    ConnectionlessBootstrap b = new ConnectionlessBootstrap(new NioDatagramChannelFactory()); 

    // Options for a new channel   
    b.setOption("receiveBufferSize", 1024); 
    System.out.println(b.getOptions()); 

    b.setPipelineFactory(new ChannelPipelineFactory() { 

     @Override 
     public ChannelPipeline getPipeline() throws Exception { 
      return Channels.pipeline(
        new MyUDPPacketDecoder(), 
        new StdOutPrintHandler()); 
     } 
    }); 

    b.bind(new InetSocketAddress(myPort)); 
} 

답변

8

: 데이터의 헤더는 전송되는 데이터의 크기가 아래

(1004)는 서버의 초기화 코드입니다 나타냅니다.

들어오는 메시지를 보관하기 위해 할당 할 공간이 얼마나되는지 예측하기 위해 netty는 할당 할 바이트 양을 예측하는 예측자를 사용합니다.

수신 버퍼 크기 예측기에는 적응 형 및 고정형의 두 가지 유형이 있습니다. 예측 인자는 예측 인자 팩토리에 의해 생성됩니다. 예측 팩토리는 부트 스트랩에 의해 생성 된 각 채널에 대해 하나를 생성합니다.

부트 스트랩에 대한 예측 팩토리가 설정되지 않았거나 채널에 수동으로 예측자가 설정되지 않은 경우 채널은 기본 768 바이트 고정 크기 예측기를 사용합니다. 768 바이트보다 큰 모든 메시지는 그 크기로 줄입니다.

을 추가 할 수 있습니다 :

b.setOption("receiveBufferSizePredictorFactory", new FixedReceiveBufferSizePredictorFactory(1024)); 

당신이 그물코 문서의 예측과 공장에 대해 읽을 수 있습니다

ReceiveBufferSizePredictor Inteface

ReceiveBufferSizePredictorFactory Inteface

+0

이되는 기본 예측에 대한 표창장을 추가 할 수 있습니다 768 바이트 고정 크기 예측 자? – eric

+0

[DatagramChannelFactory] (http://static.netty.io/3.6/api/org/jboss/netty/channel/socket/DatagramChannelConfig.html). setReceiveBufferSizePredictor (ReceiveBufferSizePredictor) '를 보라. _ 디폴트 예측자는 FixedReceiveBufferSizePredictor (768)이다. –

관련 문제