सर्वश्रेष्ठ सहकर्मी से सहकर्मी खेल वास्तुकला


10

एक सेटअप पर विचार करें जहां गेम क्लाइंट हैं:

  1. काफी कम कंप्यूटिंग संसाधन (मोबाइल उपकरण, स्मार्टफोन)
  2. सभी एक सामान्य रूटर (लैन, हॉटस्पॉट आदि) से जुड़े हैं

उपयोगकर्ता बाहरी सर्वर के बिना मल्टीप्लेयर गेम खेलना चाहते हैं।

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

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

ऐसी वास्तुकला को डिजाइन करने के लिए सबसे अच्छा तरीका क्या होगा? क्या इस तरह के लैन-स्तरीय पीयर-टू-पीयर प्रोटोकॉल के कोई ज्ञात उदाहरण हैं?

टिप्पणियाँ:

कुछ समस्याओं का समाधान यहां किया गया है , लेकिन वहां सूचीबद्ध अवधारणाएं मेरे लिए बहुत उच्च-स्तरीय हैं।

सुरक्षा

मुझे पता है कि एक आधिकारिक सर्वर नहीं होना एक सुरक्षा मुद्दा है, लेकिन यह इस मामले में प्रासंगिक नहीं है क्योंकि मैं ग्राहकों पर भरोसा करने के लिए तैयार हूं।

संपादित करें:

मैं उल्लेख करना भूल गया: यह एक तेज़-तर्रार खेल (एक शूटर) होगा।

इसके अलावा, मैं पहले ही गेम पर गेफ़र में नेटवर्किंग आर्किटेक्चर के बारे में पढ़ चुका हूं ।

जवाबों:


10

इस लेख पर नज़र डालें, एज ऑफ़ एम्पायर II की नेटवर्किंग वास्तुकला के बारे में।

वे 16 एमबी रैम और एक 28.8 kB / s मॉडेम कनेक्शन के साथ एक पेंटियम 90 पर शानदार रन बनाने वाले मल्टीप्लेयर गेम बनाने में कामयाब रहे। उन्होंने ऐसा किया कि प्रत्येक खिलाड़ी अपना सिमुलेशन चलाता है, लेकिन अपनी आज्ञाओं को सिंक्रनाइज़ करता है।

उनके पास वहां कुछ चतुर चालें हैं, मैं इसकी अत्यधिक अनुशंसा करता हूं।


5

मैंने यह एक वाणिज्यिक PSP रेसिंग गेम के लिए किया है, जो एक तदर्थ नेटवर्क पर और एक वायरलेस हॉटस्पॉट के माध्यम से काम करता है। (या वांछित होने पर इंटरनेट पर एक स्थिर सर्वर के लिए)

बिंदु 2 के कारण प्रणाली को अनुकूलन के संबंध में जटिल होने की आवश्यकता नहीं है

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

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

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

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

प्रत्येक ग्राहक अपने और अपने तात्कालिक वातावरण (उदाहरण के लिए गोलियों) के बारे में डेटा का एक आधिकारिक स्रोत हो सकता है।

यह वही है जो हमने किया, और इसने हमारी स्थिति (कारों) में हमारे लिए अच्छा काम किया। समस्याग्रस्त हिस्सा, निश्चित रूप से, जब कोई वस्तु खिलाड़ी 'बी' की तुलना में खिलाड़ी 'ए' के ​​करीब हो जाती है, और इसका स्वामित्व इसलिए एक खिलाड़ी से दूसरे खिलाड़ी में स्थानांतरित हो जाता है।

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

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


1

मैं आपको सहकर्मी वास्तुकला के लिए लॉक स्टेप पीयर का उपयोग करने की सलाह देता हूं।

आप खेल शुरू होने के बाद अपने खेल फ्रेम की गिनती करके शुरू करते हैं। एक ग्राहक 1 फ्रेम को प्रस्तुत करता है, फिर अन्य ग्राहकों को तैयार संदेश भेजता है और अन्य ग्राहकों से तैयार संदेश प्राप्त करने की प्रतीक्षा करता है।

अब सभी क्लाइंट 2nd फ्रेम के लिए जा सकते हैं। फ्रेम रेंडर करें, कमांड भेजें, प्राप्त करें, दुनिया को अपडेट करें, भौतिकी को अपडेट करें और ... इसके बाद एक दूसरे को तैयार संदेश भेजें।

यह समाधान LAN गेम के लिए बहुत अच्छा है और आपके सभी क्लाइंट सिंक में होंगे।

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

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


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

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

तो कृपया इसे अपने उत्तर में रखें। अभी मुझे नहीं लगता कि यह सवाल का जवाब देता है। इसके अलावा, कृपया पहले डुप्लिकेट टिप्पणी को हटा दें। धन्यवाद। इस विचार के अनुसार, आपके द्वारा सूचीबद्ध पहला विकल्प अनुकारवादी होने के लिए अनुकरण की आवश्यकता नहीं है?
वाकीदेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.