2010-04-01 17 views
5

का उपयोग करते हुए गैर अवरुद्ध I/O, एक दूरस्थ पते को जोड़ने के लिए कोड लग रहा है कि:निर्दिष्ट java.nio में कनेक्शन समयबाह्य

SocketChannel channel = SelectorProvider.provider().openSocketChannel(); 
channel.configureBlocking(false); 
channel.connect(address); 

कनेक्शन प्रक्रिया पर फिर finishConnect() लागू तक समाप्त करना होगा चैनल जब कुछ चयनकर्ता संबंधित कुंजी isConnectable() कहता है।

क्या इस मुहावरे का उपयोग करते समय कनेक्शन टाइमआउट निर्दिष्ट करने का कोई तरीका है?

उत्तर

0

दिलचस्प सवाल। मुझे यकीन नहीं है कि एनओओ स्वयं एक समाधान प्रदान करता है।

मेरे अनुभव में, मैंने कनेक्शन का प्रयास करने के लिए एक कॉल करने योग्य चलाया है, और फिर प्रतिक्रिया के लिए 'अंतराल' और 'टाइमआउट' चर का उपयोग करके लूप और थ्रेड.sleep() को प्रतिक्रिया के लिए भविष्य का उपयोग किया ।

उम्मीद है कि यह है कि आप एक उपयोगी दिशा में इंगित ...

इसके अलावा, मैं सुझाव है कि आप अपाचे मीना पर एक नज़र डालें (यदि आप एक NIO ढांचे के रूप में मीना का वर्णन सकता है)। यह आपके लिए इस तरह की चीजें हैंडल करता है, उदाहरण के लिए StreamIoHandler http://mina.apache.org/report/trunk/apidocs/org/apache/mina/handler/stream/StreamIoHandler.html

1

प्रश्न वास्तव में समझ में नहीं आता है। टाइमआउट ब्लॉकिंग मोड के लिए हैं। यदि आप इसे चाहते हैं, तो चैनल को ब्लॉक मोड में छोड़ दें और channel.socket().connect(address, timeout); पर कॉल करें। यदि आप गैर-अवरुद्ध मोड चाहते हैं, तो अपने वर्तमान कोड का उपयोग करें; फिर एक चयनकर्ता बनाएँ; OP_CONNECT के लिए चैनल पंजीकृत करें; जब आप इसे finishConnect(), पर कॉल करते हैं और यदि यह सही deregister OP_CONNECT देता है और आपके शेष कोड के साथ जारी रहता है।

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