2012-07-17 33 views
5

मैं 1024 "receiveBufferSize" विकल्प की स्थापना की है से केवल 768 बाइट्स दे रहा है, लेकिन मैं अभी भी messageReceived में केवल 768 बाइट्स हो रही है किसी कारण से। डेटा के हेडर बताता भेजे जाने वाले डाटा के आकार की होती है 1004.क्यों Netty मुझे यूडीपी संदेशों

नीचे सर्वर के लिए प्रवर्तन कोड है:

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)); 

आप भविष्यवक्ताओं और netty दस्तावेज में उनके कारखानों के बारे में पढ़ सकते हैं

ReceiveBufferSizePredictor Inteface

ReceiveBufferSizePredictorFactory Inteface

+0

आप डिफ़ॉल्ट भविष्यवक्ता होने के लिए एक प्रशस्ति पत्र जोड़ा जा सका 768 बाइट निश्चित आकार predictor? – eric

+0

[डेटाग्रामChannelFactory] (http://static.netty.io/3.6/api/org/jboss/netty/channel/socket/DatagramChannelConfig.html)। setReceiveBufferSizePredictor (ReceiveBufferSizePredictor) '_ पर देखें डिफ़ॉल्ट डिफिक्टर फिक्स्ड रिसीवबफर आकार प्रिंटरिक्टर (768) _ है –