2010-09-23 20 views
6

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

बुरा नेटवर्क

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

  • ग्राहकों की घड़ी पर भरोसा करने में सक्षम होना चाहिए। (मुझे लगता है कि यह असंभव है।)
  • निरंतर विलंबताएं जिन्हें आप माप सकते हैं। परिवर्तनीय विलंबता के बारे में आप क्या कर सकते हैं?

बहुत सारे गेम यूडीपी का उपयोग करते हैं जिसका अर्थ है कि संदेश खो सकते हैं। उस स्थिति में वे खेल की स्थिति का अनुमान लगाने की कोशिश करते हैं जो उनके पास पहले से मौजूद जानकारी के आधार पर है। यदि आप फिर से काम कर रहे हैं तो अनुमानित स्थिति सही है या नहीं, तो आप कैसे जानते हैं?

एमएमओ गेम में सर्वर बड़ी मात्रा में ग्राहकों को संभालता है। भार वितरित करने का सबसे अच्छा तरीका क्या है? खेल में स्थान के आधार पर? ग्राहकों के समूह को सर्वर पर बांधें? क्या आप सर्वर के माध्यम से सब कुछ भेजने से बच सकते हैं?

खिलाड़ियों छोड़ने

जब ऐसा होता है मैं 2 अलग व्यवहार देखा है। अधिकांश एफपीएस गेम में यदि खिलाड़ी जिसने गेम होस्ट किया है (मुझे लगता है कि वह सर्वर है) छोड़ देता है अन्य लोग नहीं खेल सकते हैं। अधिकांश आरटीएस खेलों में यदि कोई खिलाड़ी दूसरों को छोड़ देता है तो उसके बिना खेलना जारी रख सकता है। समर्पित सर्वर के बिना यह कैसे संभव है? क्या हर कोई पूर्ण राज्य जानता है? क्या वे किसी भी तरह सर्वर की भूमिका को स्थानांतरित कर रहे हैं?

जानकारी

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

धोखा

ऊपर समस्याओं में से कुछ के लिए एक विश्वसनीय ग्राहक वातावरण में आसान कर रहे हैं, लेकिन वह नहीं माना जा सकता। क्या ऐसे समाधान हैं जो उदाहरण के लिए 80% सामान्य उपयोगकर्ता - 20% धोखेबाज वातावरण में काम करते हैं? क्या आप वास्तव में एंटी-चीट सॉफ़्टवेयर बना सकते हैं जो काम करता है (और कर्नेल मॉड्यूल जैसे हास्यास्पद चीजों की आवश्यकता नहीं है)?

मैंने इस प्रश्न और कुछ उत्तर https://stackoverflow.com/questions/901592/best-game-network-programming-articles-and-books पढ़े लेकिन अन्य उत्तर अनुपलब्ध/प्रतिबंधित सामग्री से लिंक हैं। यह एक मंच/ओएस स्वतंत्र प्रश्न है लेकिन विशिष्ट प्लेटफॉर्म/ओएस के लिए समाधान भी स्वागत है।

+0

महान प्रश्न। –

+2

शायद यह साइट इस सवाल को और अधिक सही है? http://gamedev.stackexchange.com/ – Nakilon

+0

मुझे नहीं पता था कि साइट का एक गेम विशिष्ट संस्करण था। धन्यवाद, मैं निश्चित रूप से इसे देख लूंगा। – stribika

उत्तर

2

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

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

सामान्य नेटवर्क की समस्याओं में उन लोगों की भविष्यवाणी से गहराई से संबंधित है जो पर एक बहुत ही जटिल विषय पर है और इसके बारे में famous Valve article में बहुत अच्छी तरह से समझाया गया है।

+0

मुझे पता है कि बस राज्य को एन्क्रिप्ट करना काम नहीं करेगा, लेकिन मैंने क्रिप्टोग्राफी के कुछ बहुत ही रोचक उपयोग देखे हैं। वोटों के नतीजे की जांच करने के बिना, यह जानने के बिना कि किसने या एन्क्रिप्शन को वोट दिया है जिसके लिए कई पार्टियों को डिक्रिप्ट करने की आवश्यकता है। शायद कुछ इसी तरह इस्तेमाल किया जा सकता है। एक बार जब आप इसे देखते हैं तो ये बहुत ही सरल होते हैं लेकिन यह पता लगाना मुश्किल होता है कि अन्यथा कैसे करना है। – stribika

+0

मुझे इस लेख को पसंद है जिसमें विलंबता मुआवजे के बारे में बहुत सारी जानकारी है। – stribika

2

बुरा नेटवर्क

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

चीटिंग: aimbots और इसी तरह के

तुम सच में एक विरोधी धोखा सॉफ्टवेयर है कि काम करता है बना सकते हैं? नहीं आप नहीं कर सकते। आप नहीं जानते कि वे आपके प्रोग्राम या किसी अन्य प्रोग्राम को चला रहे हैं जो आपके जैसा कार्य करता है।

चीटिंग सूचना

आप एक समर्पित सर्वर आप भरोसा कर सकते हैं तो, धोखाधड़ी अधिक राज्य की अनुमति से देखने जैसा के साथ एक सुरक्षित कनेक्शन है, तो के लिए उपयोग, असंभव होना चाहिए।

कुछ ऐसे गेम हैं जहां क्रिप्टोग्राफी धोखाधड़ी को रोक सकती है। पोकर जैसे कार्ड गेम, जहां हर खिलाड़ी को 'डेक को घुमाने' का मौका मिलता है। विकिपीडिया पर विवरण: Mental Poker

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

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

यदि आप पोकर साइट को लागू नहीं करते हैं, तो धोखाधड़ी वैसे भी आपकी सबसे बड़ी समस्या नहीं होगी।

+1

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

+0

मुझे लगता है कि मैं मानता हूं कि एंबोट अपरिहार्य हैं। हालांकि मैंने जो देखा वह निश्चित रूप से पता लगाने योग्य है कि वे मानव की तरह कुछ नहीं खेलते हैं। बेशक इसे समायोजित किया जा सकता है ... – stribika

+0

+1 पहले बुद्धिमान प्रस्ताव के लिए मैंने गेम में लिखित के बारे में पढ़ा है, जीजी! –

2

सर्वर केवल उन्हें एफसीएफएस संसाधित नहीं कर सकता क्योंकि यह उच्च विलंबता वाले खिलाड़ियों के खिलाफ अनुचित है।

हां यह कर सकता है। यह अनुमान लगाने की कोशिश कर रहा है कि किसी के पास कितनी विलंबता है, उतनी ही उचित नहीं है जितनी विलंबता भिन्न होती है।

उस स्थिति में वे गेम की स्थिति का अनुमान लगाने की कोशिश करते हैं जो उनके पास पहले से मौजूद है। यदि आप फिर से काम कर रहे हैं तो अनुमानित स्थिति सही है या नहीं, तो आप कैसे जानते हैं?

सर्वर को अनुमान लगाने की ज़रूरत नहीं है - यह राज्य को जानता है। क्लाइंट को केवल अनुमान लगाना पड़ता है कि कनेक्शन नीचे है - जब यह बैक अप हो, तो उसे नया राज्य भेजा जाएगा।

एमएमओ गेम में सर्वर बड़ी संख्या में ग्राहकों को संभालता है। भार वितरित करने का सबसे अच्छा तरीका क्या है? खेल में स्थान के आधार पर?

कोई "सर्वश्रेष्ठ तरीका" नहीं है। हालांकि, भौगोलिक विभाजन काफी अच्छी तरह से काम करता है।

क्या आप सर्वर के माध्यम से सब कुछ भेजने से बच सकते हैं?

केवल अविश्वसनीय संचार के लिए, जो आमतौर पर बैंडविड्थ पर इतने कम होते हैं कि कोई बिंदु नहीं है।

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

कई आरटीएस गेम सभी मशीनों पर एक साथ पूर्ण राज्य को बनाए रखते हैं।

उपर्युक्त समस्याओं में से कुछ विश्वसनीय ग्राहक वातावरण में आसान हैं लेकिन इसे नहीं माना जा सकता है।

जनता के लिए खुले अधिकांश गेम 100% धोखेबाज वातावरण को मानने की आवश्यकता है।

1

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

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

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

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

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