2012-07-17 68 views
5

我已經將「receiveBufferSize」選項設置爲1024,但由於某種原因,我仍然只能在messageReceived中獲得768個字節。數據的頭指示發送的數據的大小是1004爲什麼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

您需要設置附加選項 - receiveBufferSizePredictorFactory。

爲了預測需要分配多少空間來保存傳入的消息,netty使用預測器來預測要分配的字節量。

有兩種類型的接收緩衝區大小預測器,自適應和固定大小。 預測變量由預測工廠創建,該工廠爲引導創建的每個通道創建一個預測變量。

如果沒有爲自舉設置預測器工廠(或者沒有爲通道手動設置預測器),則通道使用默認的768字節的固定尺寸預測器。所有大於768字節的消息都被縮減到這個大小。

您可以添加:

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

您可以閱讀網狀文檔中的預測和他們的工廠

ReceiveBufferSizePredictor Inteface

ReceiveBufferSizePredictorFactory Inteface

+0

你能添加引用默認預測是768字節固定大小的預測器? – eric 2013-02-05 02:45:22

+0

[DatagramChannelFactory](http://static.netty.io/3.6/api/org/jboss/netty/channel/socket/DatagramChannelConfig.html)。查看setReceiveBufferSizePredictor(ReceiveBufferSizePredictor)'_默認預測器是FixedReceiveBufferSizePredictor(768)_ – 2013-02-09 19:04:23