2012-04-03 8 views
11

विशेष रूप से मुझे उस मामले में दिलचस्पी है जहां चैनल का दूसरा छोर अनपेक्षित रूप से मर जाता है (उदाहरण के लिए प्रक्रिया मारे जाती है)। ऐसा लगता है कि नेटटी विश्वसनीय रूप से एक चैनल बंद/डिस्कनेक्ट घटना को आग नहीं देती है, कभी-कभी यह करता है और कभी-कभी ऐसा नहीं होता है। यह कनेक्शन रीसेट के लिए एक सॉकेट अपवाद भी जरूरी नहीं है।नेटटी विश्वसनीय रूप से चैनल को बंद/डिस्कनेक्ट कर सकता है?

इसके लायक होने के लिए, मैंने चैनल को लिखने का भी प्रयास किया है, लेकिन यह अपवाद फेंकने या किसी भी अन्य घटनाओं को फायर करने के बिना भी काम करना जारी रखता है।

मैं नेटटी 3.3.0 के साथ विंडोज़ पर इसका परीक्षण कर रहा हूं। फाइनल, अगर इससे कोई फर्क पड़ता है।

उत्तर

5

कुछ मामलों में जैसा कि आपने कहा है कि नेटटी पता नहीं लगा सकता कि चैनल बंद है या नहीं। Here इस प्रश्न में उल्लिखित एक ही समस्या है। साबित करने का एक तरीका heartbeat messages का उपयोग कर रहा है। नेटी IdleStateHandler के साथ दिल की धड़कन का समर्थन करता है।

इसके अलावा, आप IdleStateHandler के लिए इन संदर्भों की समीक्षा कर सकते हैं:

+0

एक समस्या यह है कि netty ख़ुशी से एक चैनल है कि अन्य में बंद कर दिया गया लिखने के लिए जारी है समाप्त। चैनल को दिल की धड़कन पर विश्वसनीय रूप से पहचानने और प्रतिक्रिया की उम्मीद करने का एकमात्र तरीका है? –

+0

यदि आप मैन्युअल रूप से कनेक्शन को कॉल करते हैं, तो इसे काम करना चाहिए। डिस्कनेक्शन का पता लगाने के लिए वैकल्पिक तरीका हो सकता है लेकिन नेटटी के लिए यह दस्तावेज़ क्या है। मेरा दूसरा सुझाव चैनल के सेट रीडेबल और isWritable विधि के बारे में जांच और पढ़ा जाता है। आप चैनल के साथ चैनल स्थिति को नियंत्रित कर सकते हैं। निर्माता के भीतर लिखने योग्य और चैनल के साथ चैनल को पठनीय बनाने के लिए उपभोक्ता के भीतर रीड करने योग्य। मुझे यकीन नहीं है लेकिन यह आखिरी चाल काम हो सकती है। – ozhan

संबंधित मुद्दे