नेटटी एनओओ लिब का उपयोग करके जावा में विकसित एक डाउनलोड क्लाइंट के लिए मैंने बैंडविड्थ सीमा सुविधा भी लागू की। तकनीकी रूप से मैं ग्लोबल ट्रैफिकशैपिंग हैंडलर ऑब्जेक्ट के माध्यम से ऐसा करता हूं। मैं NIO ग्राहक पाइपलाइन को प्रारंभ इस वर्ग 'JavaDoc के आधार पर इस प्रकार है:जावा नेटटी के साथ बैंडविड्थ उपयोग को सही तरीके से कैसे सीमित करें?
...
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);
}
ठीक है के माध्यम से गति डाउनलोड, तो मूल रूप से netty NIO कार्यक्षमता ठीक है और तेजी से काम करता है। जब मैं अधिकतम सेट करता हूं। एप्लिकेशन में डाउनलोड की गति, मैं यह भी देख सकता हूं कि बैंडविड्थ उपयोग वास्तव में अधिकतम पर कैप्ड किया गया है। स्तर। मैं बैंडविड्थ उपयोग की निगरानी
trafficHandler.getTrafficCounter().getLastReadThroughput();
हालांकि, दुर्भाग्य से अधिकतम। गति मैं मॉनीटर करता हूं कि मैंने इसे पहले सेट नहीं किया है, न कि करीब भी। उदाहरण के लिए, मैं मूल रूप से (डब्ल्यू/ओ सीमा) के बारे में 2000 केबी/एस की डाउनलोड गति है, फिर मैंने ऊपर वर्णित अनुसार 300 केबी/एस तक सीमा निर्धारित की है, लेकिन असली डाउनलोड गति 700-900 केबी/रों।
तो इस मामले में मेरी समस्या यह है: मैं देख सकता हूं कि यातायात शटर कुछ कर रहा है, लेकिन जैसा कि मैं चाहता था। क्या मुझे यहां कुछ याद आती है, उदाहरण के लिए पाइपलाइन प्रारंभ में कोई कदम?
आपकी मदद के लिए अग्रिम धन्यवाद!
आप निश्चित रूप से सही हैं, हकीकत में मैंने आपके कोड में सुझाव दिया था। GlobalTrafficShapingHandler, HashedWheelTimer, और ExecutionHandler क्लास कन्स्ट्रक्टर में पहले बनाया गया है। क्षमा करें अगर मेरी मूल पोस्ट ने आपको उस संबंध में भ्रमित कर दिया है। मैंने तदनुसार इसे अद्यतन किया है। – Matthias