2009-02-20 11 views
14

गैर-अवरुद्ध टीसीपी/आईपी सॉकेट चैनल और एनआईओ में चयनकर्ता मुझे कई टीसीपी/आईपी कनेक्शनों को छोटे धागे के साथ संभालने में मदद करता है। लेकिन यूडीपी डेटाग्राम चैनलों के बारे में कैसे? (मुझे यह स्वीकार करना होगा कि मैं यूडीपी से बहुत परिचित नहीं हूं।)जावा में यूडीपी I/O अवरुद्ध करने वाले गैर-अवरुद्ध यूडीपी I/O

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

यदि डेटाग्राम सॉकेट.send (डेटाग्राम पैकेट) वास्तव में अवरुद्ध नहीं होता है और मैं एक कनेक्टेड डेटाग्राम सॉकेट का उपयोग नहीं कर रहा हूं और केवल एक बंदरगाह से बांधता हूं, तो डेटाग्राम चैनल और चयनकर्ता के साथ गैर-अवरोधन मोड का उपयोग करने का कोई फायदा नहीं है?

उत्तर

12

यह थोड़ी देर के बाद से मैंने जावा के डेटाग्राम सॉकेट, चैनल और इसी तरह का उपयोग किया है, लेकिन मैं अभी भी आपको कुछ मदद दे सकता हूं।

यूडीपी प्रोटोकॉल टीसीपी करता है जैसे कनेक्शन स्थापित नहीं करता है। इसके बजाय, यह सिर्फ डेटा भेजता है और इसके बारे में भूल जाता है। यदि यह सुनिश्चित करना महत्वपूर्ण है कि डेटा वास्तव में वहां जाता है, तो वह ग्राहक की ज़िम्मेदारी है। इस प्रकार, भले ही आप ब्लॉकिंग मोड में हैं, फिर भी आपका प्रेषण ऑपरेशन केवल तब तक अवरुद्ध होगा जब तक यह बफर को फ़्लश करने में लगेगा। चूंकि यूडीपी नेटवर्क के बारे में कुछ भी नहीं जानता है, इसलिए यह नेटवर्क की गति की जांच किए बिना जल्द से जल्द इसे लिख देगा या यदि वास्तव में यह कहां जाना जाता है। इस प्रकार, आपके लिए, ऐसा प्रतीत होता है जैसे चैनल वास्तव में अधिक भेजने के लिए तत्काल तैयार है।

+1

क्या होगा यदि कर्नेल बफर बहुत तेजी से यूडीपी सॉकेट पर लिखता है? – trustin

+0

आपका (उपयोगकर्ता-स्तर) लिखना तब तक अवरुद्ध होगा जब तक कि कर्नेल फ़्लश नहीं करता है कि सॉकेट बफर भेजते हैं। – JLR

+7

तो ब्लॉकिंग और गैर-अवरुद्ध यूडीपी सॉकेट के बीच स्पष्ट अंतर है, बस ब्लॉकिंग और गैर-अवरुद्ध टीसीपी सॉकेट के बीच अंतर की तरह। मैंने एक साधारण पीओसी क्लाइंट लिखा और मैंने पुष्टि की कि गैर-अवरुद्ध यूडीपी चैनल के प्रेषण() अक्सर 0 लौटाते हैं, जबकि किसी को अवरुद्ध करते हुए 0 कभी नहीं लौटाता है। धन्यवाद! – trustin

8

यूडीपी ब्लॉक नहीं करता है (यह केवल ओएस को डेटा स्थानांतरित करते समय ब्लॉक करता है) इसका मतलब है कि अगर किसी भी समय अगली हॉप/स्विच/मशीन यूडीपी पैकेट को बफर नहीं कर सकती है तो यह इसे छोड़ देती है। यह कुछ परिस्थितियों में वांछनीय व्यवहार हो सकता है। लेकिन यह ऐसा कुछ है जिसे आपको अवगत होना चाहिए।

यूडीपी भी

क्रम में वे भेजे जाते हैं में
  • वितरण पैकेट के लिए गारंटी नहीं है।
  • बड़े पैकेट को तोड़ने के लिए नहीं।
  • स्विच में आगे पैकेट। स्विच के बीच अक्सर यूडीपी अग्रेषण बंद कर दिया जाता है।

हालांकि यूडीपी मल्टीकास्ट का समर्थन करता है ताकि एक ही पैकेट को एक या अधिक होस्टों को पहुंचाया जा सके। अगर किसी को पैकेट प्राप्त होता है तो प्रेषक को कोई जानकारी नहीं है।

यूडीपी के बारे में एक मुश्किल बात यह है कि यह ज्यादातर समय काम करती है, लेकिन कई बार बुरी तरह विफल हो जाती है जो पुन: पेश करने में बहुत मुश्किल होती है। इस कारण से, आपको कुछ परीक्षण करने के बावजूद विश्वसनीयता को नहीं मानना ​​चाहिए और ऐसा लगता है कि यह काम करता है।

0

गैर अवरुद्ध यूडीपी अधिग्रहण पक्ष पर अधिकतर उपयोगी है। स्थानीय परिस्थितियों के कारण पैकेट भेजने में केवल देरी हो सकती है: स्थानीय ट्रैफिक आकार देने वाले टूल जैसे "गेमिंग नेटवर्क कार्ड" जो अन्य ट्रैफिक स्रोतों पर गेमिंग यातायात को प्राथमिकता देते हैं, या अधिभारित नेटवर्क कार्ड (जो होने की संभावना नहीं है) एक पैकेट भेजने में देरी कर सकती है । एक बार सिस्टम से बाहर। एक बार पैकेट स्थानीय इंटरफ़ेस छोड़ देता है, यह अब एप्लिकेशन की चिंता नहीं है।

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