2012-09-09 20 views
8

जावा एनआईओ में, यह आसानी से समझ में आता है कि सर्वरसॉकेट चैनल में चयनकर्ता क्यों होना चाहिए। चयनकर्ता कई क्लाइंट चैनलों से जांच सकता है जो I/O संचालन के लिए तैयार हैं।जावा एनआईओ में, क्लाइंट सॉकेट चैनेल के लिए एक चयनकर्ता उपयोगी है?

हालांकि, कुछ टिप्पणी में मैंने वेब पर पढ़ा है, चयनकर्ता तंत्र क्लाइंट सॉकेट चैनल पर लागू होता है। मुझे समझ में नहीं आता कि एक ग्राहक के लिए चयनकर्ता का उपयोग क्यों किया जाता है। क्या कोई यह समझा सकता है कि सामान्य परिस्थिति में इसका उपयोग क्यों किया जाता है जहां केवल एक सर्वर है?

+0

उदाहरण के लिए, पृष्ठ के निचले हिस्से में http://tutorials.jenkov.com/java-nio/socket-channel.html चयनकर्ताओं और सॉकेट चैनलों की सिफारिश करता है। – Arvanem

+0

लेकिन वह ग्राहकों के लिए इसकी कोई भी सिफारिश नहीं करता है। उस ट्यूटोरियल में बहुत बुरी सलाह है: उदाहरण के लिए गैर-अवरुद्ध मोड में लूपिंग। एक बेहतर खोजें। – EJP

+0

@EJP कोशिश करेगा, धन्यवाद। – Arvanem

उत्तर

6

जब तक आप सैकड़ों सर्वर से कनेक्ट नहीं होते हैं, तो क्लाइंट में गैर-अवरुद्ध एनआईओ के बिंदु को देखना मुश्किल होता है। लेकिन यदि आप गैर-अवरुद्ध एनआईओ का उपयोग कर रहे हैं, तो आपको निश्चित रूप से Selector का उपयोग करना होगा, अन्यथा आप नहीं जानते कि चैनल कब पढ़ना है, या जब यह अपूर्ण लेखन के बाद फिर से लिखने योग्य हो जाता है।

5

चयनकर्ता आपको एकल धागे का उपयोग करके एकाधिक चैनलों में समवर्ती संचार की सेवा करने देते हैं। यह क्लाइंट पर उपयोगी हो सकता है जब आपको कई सर्वरों के साथ एक साथ संवाद करना चाहिए, या जब आप एक ग्राहक की भूमिका में सहकर्मी कंप्यूटर के साथ संवाद करते हैं, जैसे कि एक धार पढ़ने के दौरान।

+0

आपके उत्तर के लिए धन्यवाद। मैं यह भी योगदान देना चाहूंगा कि ग्राहकों के लिए चयनकर्ता क्लाइंट और सर्वर के बीच चयनकिज़ के पारस्परिक विनिमय के लिए स्पष्ट रूप से आवश्यक हैं। आप इस बात से सहमत या असहमत करना? – Arvanem

+0

@ अरवनम मैं यह नहीं कहूंगा कि वे "आवश्यक" हैं, क्योंकि आप दो धागे का उपयोग करके एक ही काम कर सकते हैं। फिर भी चयनकर्ता निश्चित रूप से सुविधाजनक हैं, जो आपको एक समवर्ती कार्य को संबोधित करने के लिए एकल-थ्रेडेड कोड लिखने देते हैं। – dasblinkenlight

+0

लेकिन यदि आपका सर्वर सॉकेट चैनल चयनकर्ता का उपयोग कर रहा है, तो यह आवश्यक है? क्योंकि चयनकर्ता से अलग कोई रास्ता नहीं है जो आपको SelectionKey को सर्वर पर वापस लाने की अनुमति देता है? – Arvanem