बंद करता है मैं नेटटी संस्करण 2.6.0 का उपयोग कर रहा हूं। अंतिम।नेटटी - कॉलिंग channel.disconnect() वास्तव में चैनल
यदि मैं नेटटी दस्तावेज़ीकरण को सही ढंग से समझ रहा हूं, तो चैनल पर डिस्कनेक्ट() को कॉल करने से मुझे बाद में कनेक्ट करने के लिए कनेक्ट() को कॉल करने की अनुमति मिलनी चाहिए। हालांकि, जब मैं डिस्कनेक्ट() को कॉल करता हूं, तो मेरे SimpleChannelHandler subclass के दोनों चैनल डिस्कनेक्ट() और channelClosed() को कॉल किया जाता है।
मैं डिबग मोड में इस खोला और मूल रूप से घटनाओं का क्रम है:
- मैं अपने चैनल
Channels.disconnect() कहा जाता हो जाता है पर डिस्कनेक्ट() फोन:
public static ChannelFuture disconnect(Channel channel) { ChannelFuture future = future(channel); channel.getPipeline().sendDownstream(new DownstreamChannelStateEvent( channel, future, ChannelState.CONNECTED, null)); return future; }
आखिरकार, NioSocketPipelineSink.eventSunk() को कॉल किया जाता है, और संबंधित भाग है:
case CONNECTED: if (value != null) { connect(channel, future, (SocketAddress) value); } else { channel.worker.close(channel, future); } break;
तो के बाद से मान शून्य है और राज्य से जुड़ा हुआ है, चैनल को बंद कर दिया जाता है (हालांकि here अशक्त के साथ जुड़ा के अनुसार डिस्कनेक्ट करने के लिए, जरूरी बंद नहीं एक अनुरोध का संकेत देना चाहिए।
तो क्या मुझे यहां कुछ याद आ रही है? डिस्कनेक्ट() का क्या मतलब है यदि यह केवल चैनल बंद होने पर परिणाम देता है?
यह एक बड़ी समस्या नहीं है, क्योंकि अगर मुझे अपनी स्थिति के लिए सिर्फ एक नया चैनल बनाना है, लेकिन शुरुआती निरीक्षण से यह नेटी बग की तरह लगता है, जब तक कि मैं सिर्फ गलत नहीं समझता कि यह कैसा लगता है काम या मैं मूर्खतापूर्ण कुछ कर रहा हूँ।
हम्म, मुझे लगता है कि यह समझ में आता है। मैं मुख्य रूप से नेटटी टीसीपी चैनलों का पुन: उपयोग करने में सक्षम होने का एक तरीका ढूंढ रहा था, जब वे पूरे चैनल और पाइपलाइन को पूरी तरह से पुनर्निर्मित किए बिना डिस्कनेक्ट किए गए थे (और इसे संदर्भित करने वाले ऑब्जेक्ट्स को अपडेट करना), लेकिन शायद यह एक मुद्दा होने के लिए पर्याप्त महंगा नहीं है । –
एक टीसीपी कनेक्शन लगभग हमेशा उच्च स्तर पर "तंग" कनेक्शन का प्रतिनिधित्व करता है; अधिकतर मामलों के लिए यह उच्च कार्य कनेक्शन समाप्त होने पर उन्हें छोड़ने के बजाय निचले स्तर के संसाधनों का उपयोग करने की कोशिश कर रहे अधिक काम और अधिक भ्रम होगा। –