2010-03-01 16 views
8

गति, अनुकूलन और स्केलेबिलिटी उडप और टीसीपी प्रोटोकॉल के बीच सामान्य तुलना हैं। थोड़ा अतिरिक्त ओवरहेड के नुकसान के साथ टीसीपी टाउट्स विश्वसनीयता, लेकिन गति उत्कृष्ट के लिए अच्छा है। एक बार टीसीपी सॉकेट स्थापित हो जाने पर, सॉकेट खोलने के लिए कुछ ओवरहेड की आवश्यकता होती है। लेकिन उदप के उल्लिखित बोझ की तुलना में, वास्तव में प्रोटोकॉल में अधिक ओवरहेड है? मैंने यह भी सुना है कि टीसीपी के साथ स्केलेबिलिटी समस्याएं हैं ... फिर भी इंटरनेट (वेब ​​पेज/सर्वर) टीसीपी पर चलता है - तो यह टीसीपी के बारे में क्या है जो स्केलेबिलिटी को रोकता है?टीसीपी विश्वसनीयता बनाम उद बर्डेंस गंभीर, उच्च प्रदर्शन सर्वर

ठीक है ... तो Udp को कनेक्शन को खोलने के ऊपरी हिस्से की आवश्यकता नहीं है। लेकिन, यह आवश्यक है कि आप यह सुनिश्चित करने के लिए अतिरिक्त विधियां लिखें कि सभी पैकेट वहां पहुंच जाएंगे, उम्मीद है कि आप जिस क्रम में प्राप्त करना चाहते हैं। यदि एक पैकेट पूरी तरह से प्राप्त नहीं होता है, तो आपको क्लाइंट या सर्वर को फिर से भेजने के लिए कहना होगा। और आपको आंशिक पैकेट के लिए कुछ प्रकार का संदेश संग्रह रखना होगा, आंशिक संदेशों का पुनर्निर्माण करना होगा, और संदेश को अंततः संसाधित करने से पहले एक पूर्ण संदेश की जांच करनी होगी। उल्लेख नहीं है कि किसी संदेश का दूसरा भाग इसे कभी नहीं बनाता है, आपको या तो पूरी चीज को फिर से भेजना होगा, या उस हिस्से को फिर से भेजना होगा जिसे हम याद कर रहे हैं, या जो भी हो।

असल में, मेरा प्रश्न हैं:

  1. क्यों मैं एक गंभीर, उच्च प्रदर्शन जोड़ा बनाम की "भूमि के ऊपर" संदेश जाँच और मैनुअल एसीके की "भूमि के ऊपर" के साथ सर्वर के लिए TCP पर UDP का चयन करेंगे एक निरंतर धारा?
  2. यदि टीसीपी वर्ल्डक्राफ्ट की पसंद के लिए पर्याप्त है, तो टीसीपी को प्रोटोकॉल के रूप में व्यापक रूप से स्वीकार नहीं किया जाता है ताकि गेम सर्वर के लिए उपयोग किया जा सके?

नोट: मैं सर्वर के लिए Udp विकल्पों को लागू करने का विरोध नहीं कर रहा हूं। हम .NET 3.5 ढांचे पर सी # का उपयोग कर रहे हैं। तो मुझे Udp बोझ से निपटने के लिए सर्वोत्तम प्रथाओं में भी रुचि होगी। मैं भी बल्कि TcpListener, TcpClient, आदि आदि

उत्तर

11

खैर का उपयोग करने से सॉकेट स्तर पर अतुल्यकालिक तरीकों का उपयोग कर रहा हूँ, मैं कुछ और अधिक अप पढ़ने की सिफारिश करेंगे। बहुत सारे स्थानों समर्थक है और चोर के टीसीपी के बनाम यूडीपी और इसके विपरीत को देखने के लिए कर रहे हैं, यहाँ कुछ हैं:

हालांकि, यह लिंक आपको सबसे अधिक रुचि दे सकता है, क्योंकि यह सीधे नेटवर्क प्रोग्रामिंग प्रोग्रामिंग के बारे में है:

अगर मैं कुछ छोटे उद्धृत करने के लिए किए गए: बहुत स्पष्ट तो

निर्णय लगता है, टीसीपी सब कुछ हम चाहते हैं करता है और उसके उपयोग करने के लिए सुपर आसान है, जबकि यूडीपी एक है विशाल गधे में दर्द और हमें स्क्रैच से सबकुछ कोड करना होगा।तो स्पष्ट रूप से हम केवल टीसीपी का उपयोग करते हैं?

गलत।

टीसीपी का उपयोग करना सबसे खराब संभव गलती है जिसे आप नेटवर्क गेम विकसित करते समय कर सकते हैं! समझने के लिए, क्यों आप को यह देखने की ज़रूरत है कि टीसीपी वास्तव में आईपी से ऊपर क्या कर रहा है ताकि सब कुछ सरल हो!

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

+0

हाँ ... यह * गधे * दर्द में दर्द है जो मुझे सोचता रहता है। लेकिन मैं शोध रखता हूं ... – IAbstract

+1

ठीक है, यह मुझे लगता है कि बलिदान में से एक है। यदि आप गेमिंग के लिए इसका उपयोग कर रहे हैं, हालांकि सर्वोत्तम अभ्यास यूडीपी हालांकि प्रतीत होता है। –

+0

मुझे लगता है कि टीसीपी का उपयोग केवल गेम के लिए एक भयानक विचार है यदि आपका गेम "सर्वश्रेष्ठ प्रयास वितरण" के साथ अच्छा काम करता है। यदि आपका गेम संदेश ऑर्डरिंग पर निर्भर करता है, और ड्रॉप पैकेट को अनुमति नहीं देता है, तो टीसीपी आमतौर पर बहुत तेजी से समाप्त हो जाएगा (यूडीपी डेटाग्राम * इंटरनेट पर * हर समय * गिरा दिया जाता है)। क्वैक जैसे खेलों ने यूडीपी (और आईपीएक्स) को गेट-गो से इस्तेमाल किया, क्योंकि देर से पैकेट वैसे भी बेकार है। साम्राज्यों या सभ्यता की आयु जैसे खेल टीसीपी का इस्तेमाल करते थे, क्योंकि यह काफी विपरीत है - व्यक्तिगत संदेश अधिकतर बेकार होते हैं जब तक कि सभी पिछले संदेश आते हैं और संसाधित नहीं होते हैं। – Luaan

1

मुझे लगता है कि स्केलेबिलिटी को रोकने वाले टीसीपी/आईपी का सबसे बड़ा हिस्सा यह है कि यह मूल रूप से खिड़की के आकार तक सभी आने वाले/आउटगोइंग कनेक्शनों पर एक बफर बनाए रखता है। तो अगर मेरे पास उच्च विलंबता है लेकिन उच्च थ्रूपुट क्लाइंट है, तो मैं बात कर रहा हूं, मुझे सभी भेजे गए पैकेट बफर में रखना होगा जब तक कि मुझे एक एक प्राप्त न हो जाए। तो कुछ कनेक्शनों के लिए यह ठीक है, लेकिन 100 के कनेक्शन को संभालने के लिए, यह समस्याग्रस्त ओवरहेड होना शुरू हो सकता है। प्राप्त होने वाले अंत में, यदि एक पैकेट गिरा दिया जाता है, तो फिर से यह आवश्यक सभी नए पैकेट बफर करेगा जब तक कि एक आवश्यक पुन: प्रेषित नहीं किया जाता है।

यदि आप रीट्रान्समिशन को लागू करने जा रहे हैं, तो आपको वही काम करने की आवश्यकता है, और इसलिए एक ही ओवरहेड होगा। हालांकि, यूडीपी आपको लाभ प्रदान करता है, अगर आपको एंड-टू-एंड लिंक गति पता है, या अगर कुछ संदेश ऑर्डर से बाहर किया जा सकता है, या कुछ संदेशों को रीट्रान्समिशन की आवश्यकता नहीं है।

पैकेट 1 = कदम 3 = चाल 2,2 करने के लिए 1,1 करने के लिए पैकेट 2 = शूट पैकेट

अधिकांश खेल डिजाइनर, अगर पैकेट 1 खो दिया है, लेकिन पैकेट 3 प्राप्त होता है: गेमिंग परिदृश्य रखते हुए , पैकेट 1 अब महत्वपूर्ण नहीं है क्योंकि इसमें किसी भी तरह की जानकारी शामिल है। हालांकि, आप यह चुन सकते हैं कि पैकेट 2 महत्वपूर्ण है, इसलिए यदि यह नक़्क़ाशी नहीं है, तो एक पुन: प्रेषण भेजें।

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

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

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

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

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

हालांकि, इसे यूडीपी के साथ बदलकर, नेटवर्किंग की महत्वपूर्ण समझ की आवश्यकता होती है। मैंने बुरी तरह लिखित यूडीपी कार्यक्रमों को संतृप्त 1 जीबीपीएस लिंक देखा है और लिंक पर सभी ट्रैफिक को मार डाला है, क्योंकि उन्होंने एक बेवकूफ रीट्रान्समिशन एल्गोरिदम लागू किया है।

यहाँ सब टीसीपी की एक सूची है/आईपी अब चाहते हैं कि आप ढीला यूडीपी जाकर ऐसा कर सकते हैं: - आप के लिए आदेश आगमन में कर रहे हैं कार्यक्रम - पुनर्संचरण (अब फास्ट retransmit, चयनात्मक पावती, और अन्य सुविधाओं के साथ) - अधिकतम खंड आकार - पथ MTU डिस्कवरी - ब्लैक होल का पता लगाने (पथ MTU के विस्तार) - बाधा से बचाव

इस वजह से

, मैं अत्यधिक साथ टीसीपी/आईपी चिपके की सलाह देते हैं तो यह सूट आप की जरूरत है कर रहे हैं ।

भी नहीं निट की पसंद करने के लिए है, लेकिन आप टीसीपी/आईपी पर इंटरनेट चल रहा है जा रहे हैं टिप्पणी गलत है, इंटरनेट routeable प्रोटोकॉल check them out here के तथ्य दर्जनों में हैं। मुझे लगता है कि आप वेब पेजों का जिक्र कर रहे थे और वेब सर्वर सभी टीसीपी/आईपी के शीर्ष पर चल रहे हैं। जो वेब के लिए फिर से बढ़िया है, जहां तक ​​मनुष्य इंसानों को सही तरीके से दिखाए जाने तक देरी नहीं दिखाई देगा। टीसीपी/आईपी के लिए भी, उनकी कुछ चुनौती है कि टीसीपी/आईपी वेब के लिए आक्रामक नहीं है: Google thinks tcp/ip should be more aggressive by default

+0

असल में, हाँ, मैं और अधिक वेब संबंधित सामग्री का जिक्र कर रहा था। – IAbstract

4

"गंभीर उच्च प्रदर्शन" परिभाषित करें - आप कितने समवर्ती कनेक्शन के बारे में बात कर रहे हैं और कितना डेटा बह रहा है?

इस प्रश्न के उत्तर पर एक नज़र डालें What do you use when you need reliable UDP? जो कुछ विश्वसनीय प्रोटोकॉल सूचीबद्ध करता है जो पहले ही यूडीपी पर बनाए गए हैं। आपको वह व्यक्ति मिल सकता है जो आपकी परिस्थिति के लिए काम करता है, या आप कम से कम कुछ उपयोगी विचार पा सकते हैं।

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

तो, आईएमएचओ, यदि आपको 100% विश्वसनीयता की आवश्यकता है और वितरण के क्रम में टीसीपी के साथ जाएं; यूडीपी में टीसीपी को आजमाएं और पुन: कार्यान्वित न करें।

7

सबसे पहले, मैं सिर्फ Unix Network Programming धारा से स्टीवंस व्याख्या करेंगे 22.4 "जब टीसीपी के बजाय यूडीपी का उपयोग करने के लिए":

वह मूल रूप से निम्नलिखित कहते हैं:

  1. यूडीपी प्रसारण के लिए एकमात्र विकल्प है/मल्टीकास्ट - तो आपको वहां इसका उपयोग करना होगा।
  2. यूडीपी सरल अनुरोध/उत्तर ऐप्स के लिए उपयोग किया जा सकता है। लेकिन आपको कम से कम एक्स, टाइमआउट और रीट्रान्समिशन का अर्थ है कि आप अपना खुद का त्रुटि पहचान जोड़ना चाहते हैं।
  3. यूडीपी थोक डेटा स्थानांतरण (फ़ाइल स्थानान्तरण) के लिए उपयोग नहीं किया जाना चाहिए क्योंकि आपको इसे सही काम करने के लिए टीसीपी में सभी कार्यक्षमताओं में निर्माण करना होगा।
  4. यूडीपी वास्तविक समय डेटा के लिए इस्तेमाल किया जाना चाहिए जहां वितरण की गति सबसे महत्वपूर्ण है और कुछ डेटा हानि इस तरह के वास्तविक समय सेंसर डाटा, लाइव मल्टीमीडिया धाराओं, वास्तविक समय स्टॉक उद्धरण, आदि
के रूप में कोई मुद्दा नहीं है

आपके पहले प्रश्न का उत्तर "उच्च प्रदर्शन" की आपकी परिभाषा पर बहुत निर्भर है। यदि आप प्राथमिक चिंता कम विलंबता हैं, यानी यूडीपी की तुलना में जितनी जल्दी संभव हो सके व्यक्तिगत डेटा पैकेट/अनुरोध आने का तरीका होगा। इसके लिए दो प्राथमिक कारण हैं। माना जाता है कि टीसीपी का उपयोग करने से पैकेट/अनुरोध एक-दूसरे से काफी स्वतंत्र हैं head-of-line blocking के रूप में जाना जाने वाली समस्या पेश करेंगे।

मान लें कि आप दो स्वतंत्र पैकेट/अनुरोध भेजते हैं। पहला ए तो बी। चूंकि टीसीपी धारा आधारित है, यदि नेटवर्क में ए खो गया है और उसे पुनः प्रेषित करने की आवश्यकता है तो भले ही बी पहले से ही सफलतापूर्वक पहुंचा हो, भले ही कोई आ गया हो, तब तक स्टैक द्वारा एप्लिकेशन को डिलीवर नहीं किया जा सकता है, अनावश्यक विलंबता पेश करना । इतना ही नहीं, लेकिन जब तक कोई नहीं आता है, बी को स्टैक द्वारा स्वीकार नहीं किया जा सकता है जिससे बी को भी पुन: संसाधित किया जा सकता है जिससे अनावश्यक नेटवर्क भीड़ हो जाती है।

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

उच्च प्रदर्शन (कम विलंबता) सर्वरों में एक और मुद्दा Nagle Algorithm है जो टीसीपी संचार में महत्वपूर्ण विलंबता जोड़ सकता है।

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

1

यह विश्वसनीयता बनाम प्रदर्शन है।

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

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

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