2011-01-14 12 views

उत्तर

256

बहुत समय पहले मैंने दोनों के बीच अंतर को समझाने के लिए एक महान सादृश्य पढ़ा था। मुझे याद नहीं है कि मैंने इसे कहाँ पढ़ा है, दुर्भाग्यवश मैं इस विचार के लिए लेखक को श्रेय नहीं दे सकता, लेकिन मैंने मूल सादृश्य में भी अपना खुद का ज्ञान जोड़ा है। तो यहां जाता है:

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

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

तो जब आप क्रम में जानकारी रखते हैं और बरकरार है तो आप एक स्ट्रीम सॉकेट का उपयोग करते हैं। फ़ाइल स्थानांतरण प्रोटोकॉल यहां एक अच्छा उदाहरण हैं। आप अपनी सामग्री के साथ यादृच्छिक रूप से चारों ओर घिरा हुआ और क्षतिग्रस्त कुछ फ़ाइल डाउनलोड नहीं करना चाहते हैं!

जब आप किसी स्ट्रीम के ऊपरी ओवरहेड नहीं चाहते हैं तो ऑर्डर समय पर डिलीवरी (वीओआईपी या गेम प्रोटोकॉल सोचें) से कम महत्वपूर्ण है, तो आप डेटाग्राम सॉकेट का उपयोग करेंगे (यही कारण है कि DNS मुख्य रूप से डेटाग्राम प्रोटोकॉल है, ताकि सर्वर कई बार कई अनुरोधों को बहुत जल्दी प्रतिक्रिया दे सकें), या जब डेटा कभी भी अपने गंतव्य तक पहुंचने पर बहुत ज्यादा परवाह नहीं करता है।

वीओआईपी/गेम केस पर विस्तार करने के लिए, ऐसे प्रोटोकॉल में अपना डेटा-ऑर्डरिंग तंत्र शामिल है। लेकिन अगर एक पैकेट क्षतिग्रस्त हो गया है या खो गया है, तो आप फिर से भेजने के अनुरोध को जारी करने के लिए स्ट्रीम प्रोटोकॉल (आमतौर पर टीसीपी) पर इंतजार नहीं करना चाहते हैं - आपको जल्दी से ठीक होने की आवश्यकता है। टीसीपी को पुनर्प्राप्त करने में कुछ मिनट लग सकते हैं, और रीयलटाइम प्रोटोकॉल जैसे गेमिंग या वीओआईपी के लिए भी तीन सेकंड अस्वीकार्य हो सकते हैं! यूडीपी जैसे डेटाग्राम प्रोटोकॉल का उपयोग करने से सॉफ्टवेयर खोए गए डेटा को अनदेखा करके या टीसीपी की तुलना में जल्द से जल्द अनुरोध कर सॉफ़्टवेयर को इस तरह की घटना से ठीक से पुनर्प्राप्त करने की अनुमति देता है।

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

+1

सीधे शब्दों में SYNACK के विस्तार सहित के लिए शानदार पुनर्प्राप्त प्राप्त भेजा है। – LazerSharks

+0

यह उदाहरण, या एक बहुत ही समान, लिनक्स प्रोग्रामिंग इंटरफेस से है। 2010 संस्करण में इन उदाहरणों को पेज 1155 और 1159 पर शामिल किया गया है। – Josh

19

स्ट्रीम सॉकेट:

  • समर्पित & बिंदु से बिंदु सर्वर और ग्राहक के बीच चैनल।
  • डेटा ट्रांसमिशन के लिए टीसीपी प्रोटोकॉल का उपयोग करें।
  • विश्वसनीय और हानिरहित।
  • इसी तरह के आदेश में भेजा गया/प्राप्त किया गया डेटा।
  • खो/गलत डेटा

डेटाग्राम सॉकेट ठीक करने के लिए लंबे समय:

  • सर्वर और ग्राहक के बीच कोई समर्पित & बिंदु से बिंदु चैनल।
  • डेटा ट्रांसमिशन के लिए यूडीपी का उपयोग करें।
  • 100% विश्वसनीय नहीं है और डेटा खो सकता है।
  • डेटा/आदेश नहीं हो सकता है एक ही
  • परवाह या तेजी से मत खो/गलत डेटा
संबंधित मुद्दे