ऑनलाइन मल्टीप्लेयर गेम की मूल बातें [बंद]


9

मैं वर्तमान में वास्तविक समय में एसी # ऑनलाइन मल्टीप्लेयर गेम पर काम कर रहा हूं। इसका उद्देश्य UDP प्रोटोकॉल का उपयोग करके क्लाइंट / सर्वर आधारित कनेक्शन होना है। अब तक मैंने यूडीपी का उपयोग खिलाड़ियों के आंदोलनों और घटनाओं के लिए टीसीपी (एक खिलाड़ी की शूटिंग, एक खिलाड़ी की जान गंवाने वाला) के लिए किया है क्योंकि मुझे यह सुनिश्चित करने की आवश्यकता है कि सर्वर से जुड़े सभी खिलाड़ियों के लिए ऐसा डेटा आ जाएगा। मुझे पता है कि यूडीपी को 'अविश्वसनीय' कहा जाता है और कुछ पैकेट खो सकते हैं। लेकिन मैंने टीसीपी और यूडीपी को कभी नहीं मिलाने के लिए हर जगह पढ़ा है क्योंकि यह कनेक्शन को प्रभावित कर सकता है।

मुख्य सवाल यह है कि मुझे अपना नेटवर्क कैसे व्यवस्थित करना चाहिए?

UDP कनेक्शन रहित है, मुझे कैसे बचाना चाहिए कौन है? क्या मुझे एक सूची में ग्राहकों के आईपी पते को सहेजना चाहिए?

क्या मुझे महत्वपूर्ण घटनाओं के लिए टीसीपी का उपयोग करना चाहिए या यूडीपी का उपयोग करना चाहिए? अगर मुझे यूडीपी का उपयोग करने की आवश्यकता है, तो मैं यह कैसे सुनिश्चित कर सकता हूं कि डेटा खो नहीं जाएगा?

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


@JoshPetrie यह प्रश्न वैध है "मुख्य प्रश्न यह है कि मुझे अपना नेटवर्क कैसे व्यवस्थित करना चाहिए?"। यह इस बारे में नहीं है कि मुझे इसका उपयोग करना चाहिए या नहीं। ओपी एक का उपयोग करता है और उसे पहले से चुने गए एक और तकनीक को जोड़ने के बारे में सलाह की आवश्यकता होती है। यह व्यापक है क्योंकि यह उत्तर नहीं रहता है जिसमें तकनीक का उपयोग किया जाना चाहिए लेकिन कैसे पाइप को फुलाने से बचने के लिए सॉफ़्टवेयर को संरचित किया जा सकता है, अंतराल को कम कर सकते हैं और अंतर्निहित तकनीक से स्वतंत्र रूप से विश्वसनीयता बढ़ा सकते हैं।
कोयोट

यह बहुत व्यापक है। प्रश्न को संपादित किया जाना चाहिए (ऐसा करने के लिए स्वतंत्र महसूस करें, यह बहुत पुराना है) अधिक ऑन-टॉपिक होना चाहिए, फिर इसे फिर से खोला जा सकता है।

जवाबों:


6

UDP के पास ओवरहेड कम है, लेकिन इसके बारे में जाने बिना पैकेट खोने की कीमत पर (टीसीपी के साथ ओवरहेड का हिस्सा यह सुनिश्चित करता है कि खोए हुए पैकेट फिर से भेजे जाएं)।

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

इसके अलावा, यह न मानें कि आपके प्रत्येक खिलाड़ी का एक अलग आईपी पता होगा - ऐसी कई स्थितियाँ हैं जहाँ कई उपयोगकर्ता एक ही इंटरनेट कनेक्शन साझा करते हैं, और यदि स्कूली बच्चे आपके खेल से आच्छादित हो जाते हैं, तो आप शर्त लगा सकते हैं कि वे शायद हैं। यह पता लगाने के लिए कि अपने काम को करने के बजाय कक्षा के दौरान इसे कैसे स्थापित करें और इसे चलाएं (और क्या आप ऐसा नहीं करेंगे कि वे इस कीमती समय को किसी और के बजाय आपके खेल पर खर्च कर रहे हों?)।

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

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


1
मूल प्रश्न में एक क्लाइंट-सर्वर मॉडल का उल्लेख किया गया है, इसलिए "यूपीडी" को अवरुद्ध करने वाली "साइटें" अप्रासंगिक हैं; कि ग्राहक की समस्या है, और मुझे संदेह है कि कई ग्राहक वास्तव में सभी यूडीपी को अवरुद्ध करते हैं। "टीसीपी का उपयोग करना सबसे खराब संभव गलती है जिसे आप नेटवर्क गेम को विकसित करते समय कर सकते हैं! यह समझने के लिए कि, आपको यह देखने की आवश्यकता है कि टीसीपी वास्तव में आईपी से ऊपर क्या कर रहा है ताकि सब कुछ इतना सरल हो सके!" Gafferongames.com/networking-for-game-programmers/udp-vs-tcp
वास्तव में 005

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

@ वास्तव में005: इसके अलावा, यूडीपी और टीसीपी के मिश्रण का उपयोग करना काफी स्वीकार्य हो सकता है क्योंकि टीसीपी का उपयोग निचले-प्राथमिकता वाले डेटा हस्तांतरण के लिए किया जा सकता है, जबकि यूडीपी का उपयोग चीजों की उच्च गति कार्रवाई पक्ष के लिए किया जा सकता है। यह भी ध्यान रखना दिलचस्प है कि IPv6 के साथ नए विकल्प उपलब्ध हैं (जो IPv4 के साथ उपलब्ध नहीं हैं) जो कि गेमिंग के वास्तविक समय की जरूरतों को पूरा कर सकते हैं जबकि प्रकृति में कनेक्शन रहित नहीं हैं, लेकिन मुझे लगता है कि यह IPv6 से पहले होगा IPv4 पर भरोसा किए बिना भी गेम द्वारा उपयोग किया जा सकता है (यह दुर्भाग्यपूर्ण है, इसलिए हम IPv4 के साथ सबसे अच्छा करते हैं जो हम अभी कर सकते हैं)।
रंडोल्फ रिचर्डसन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.