मैं एक सहकर्मी से सहकर्मी मल्टीप्लेयर गेम कैसे बना सकता हूं? [बन्द है]


37

मैं एक p2p मल्टीप्लेयर गेम कैसे बना सकता हूं? मैं एक सर्वर-कम मल्टीप्लेयर गेम करना चाहूंगा। लेकिन फिर, सभी ग्राहक एक-दूसरे को कैसे जानते हैं?

पी 2 पी-प्रोटोकॉल फाइल ट्रांसफर में इतना प्रसिद्ध क्यों है लेकिन मल्टीप्लेयर गेम में नहीं?


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

लेकिन P2p मल्टीप्लेयर गेम्स में काफी लोकप्रिय है! किसने कहा कि नहीं है? यहां तक ​​कि कुछ बड़े MMOs पी
एडम हर्ट

जवाबों:


34

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

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

खेलों की एक अच्छी संख्या सहकर्मी से सहकर्मी नेटवर्किंग का उपयोग करती है, जिसमें अधिकांश रणनीति, खेल और ड्राइविंग खिताब शामिल हैं। बस के बारे में सभी Xbox360 और PS3 खेल P2p नेटवर्किंग का उपयोग करें। क्लाइंट-सर्वर आर्किटेक्चर ज्यादातर पहले व्यक्ति शूटर या MMO गेम में उपयोग किया जाता है।

क्लाइंट-सर्वर को आमतौर पर लागू करना आसान होता है क्योंकि केवल 1 मशीन से पूरे गेम की स्थिति का पता नहीं चलता है, क्लाइंट मूल रूप से चीजों को सुचारू बनाने के लिए कुछ भविष्यवाणी के साथ बस रेंडरर्स हैं।

जब आप पी 2 पी इंजन का निर्माण करते हैं, तो सभी ग्राहकों को खेल की दुनिया की पूर्ण स्थिति की आवश्यकता होती है और इन सभी को सिंक में रहने की आवश्यकता होती है।

पी 2 पी और क्लाइंट-सर्वर आर्किटेक्चर के बारे में अधिक जानकारी के लिए मेरा सुझाव है कि आप निम्नलिखित लेख पढ़ें: गेम नेटवर्किंग के बारे में हर प्रोग्रामर को क्या पता होना चाहिए

और अगर आप सामान्य रूप से नेटवर्किंग के लिए नए हैं तो उस साइट के अन्य बेहतरीन लेखों को चेकआउट करें। ग्लेन एक नेटवर्किंग प्रतिभा है।


13

कई कारण हैं गेम्स में पी 2 पी लोकप्रिय नहीं है, ज्यादातर लैग के कारण। हर कोई सबसे धीमा खिलाड़ी है। हम यहां बैंडविड्थ के बारे में बात नहीं कर रहे हैं, लेकिन पिंग टाइम।

पी 2 पी डेटा के टन को स्थानांतरित कर सकता है, लेकिन यह काफी उच्च पिंग के साथ ऐसा करता है, गेम को बहुत कम मात्रा में डेटा को कम से कम पिंग समय के साथ संचारित करने की आवश्यकता होती है।


13

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

उन्होंने टिप्पणी को ऑनलाइन नहीं होने दिया, इसलिए मैं इसे यहां उद्धृत करूंगा:

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

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

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

[...]

आप उस सूत्र को पा सकते हैं जिसका मैं http://www.devmaster.net/forums/showthread.php?t=14640 पर उल्लेख कर रहा हूं ।

मुझे लगता है कि किसी ने फ़ायरवॉल समस्याओं का उल्लेख किया है जो सहकर्मी से सहकर्मी के लेख में से एक में है। एक संभावित समाधान NAT-Punchthrough होगा:
- NAT Punchthrough अवलोकन
- पीयर-टू-पीयर कम्युनिकेशन अक्रॉस स्क्रिप्ट एड्रेस एड्रेस

100% सफलता दर नहीं है, इसलिए आपको खिलाड़ियों को वैसे भी एक पोर्ट खोलने के लिए कहना चाहिए।


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

@BlueRaja Starcraft वास्तव में इसके लिए एक अच्छा उदाहरण नहीं है, क्योंकि यह इंजन 100% निर्धारक है। आपको केवल खिलाड़ी कमांड को टाइमस्टैम्प और कंप्यूटर के साथ संचारित करना होगा, एक ही कार्यक्रम को साझा करने वाले कंप्यूटर हमेशा चालू स्थिति पर सहमत होंगे। अंतर को कम करने का एक अच्छा तरीका यह है कि प्रत्येक और हर स्टेट अपडेट को gametime (फिजिक्स-फ्रेम या टिक) के साथ अपडेट किया जाए और प्राप्त फ्रेम पर इनमें से कुछ फ्रेम को कैश किया जाए। (इसके लिए सबसे एफपीएस गेम, उदाहरण सीएस: एस और टीएफ 2 हैं।) इसके अलावा, कुछ महत्वपूर्ण के लिए फ्लोटिंग पॉइंट नंबरों का उपयोग न करें, क्योंकि उनके कार्यान्वयन में अंतर हो सकता है।
तमसाची

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

चूँकि ब्लॉग पोस्ट Google के कैश से गायब हो गई है, यहाँ यह इंटरनेट आर्काइव पर है: web.archive.org/web/20091120214817/http://gafferongames.com/…
fernozzle

9

Good ट्रू पीयर-टू-पीयर ’गेमप्ले का एक अच्छा उदाहरण स्टारक्राफ्ट जैसे वास्तविक समय की रणनीति गेम होगा।

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

जब एक खिलाड़ी एक क्रिया करता है, तो कमांड / आदेश ('एक्स, वाई के लिए जार्गलिंग ले जाएँ') अन्य सभी खिलाड़ियों को भेजा जा सकता है, सिमुलेशन के सभी उदाहरणों द्वारा एक दूसरे के बाद के एक अंश को निष्पादित किया जा सकता है।

इस स्थिति में, यदि कोई खिलाड़ी डिस्कनेक्ट करता है, तो खेल जारी रह सकता है - चूंकि गेम चलाने के लिए सर्वर / होस्ट की कोई आवश्यकता नहीं है, शेष खिलाड़ी ले जा सकते हैं।

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


5

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

इसने कहा कि खेल के बारे में कोई कैसे सीखता है कि आप जिस मैचिंग या लॉबिंग सेवा का उपयोग करते हैं या बनाते हैं, वह है। लेकिन यहां तक ​​कि एक बार खेल के बारे में जानने के बाद भी, एक या एक से अधिक साथी हो सकते हैं जो दूसरों की तुलना में अधिक समान हैं। खेलने के इच्छुक 3 ग्राहकों के मामले पर विचार करें, एक खुले नट के पीछे, 2 सख्त (बंद) नट के पीछे। ओपन नेट पीयर अन्य दो से कनेक्शन ले सकता है। लेकिन 2 सख्त एक दूसरे से सीधे कनेक्ट नहीं हो सकते हैं, उन्हें पैकेटों को रिले करने के लिए खुली नेट की आवश्यकता होगी। यदि खेल से खुला नेट पीयर गिरता है, तो या तो किसी अन्य रिले को ढूंढना होगा या खेल बाधित हो जाएगा।


2

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


1

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

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

Smartfoxserver के लिए दस्तावेज़ीकरण आपकी मदद कर सकता है और / या आप इसे अपने खेल के लिए भी उपयोग करना चाहते हैं। आप केवल एक अलग क्लाइंट और सर्वर प्रोग्राम रखने के बजाय इसे अपने क्लाइंट गेम में एम्बेड करेंगे।


1
यह एक पी 2 पी सेटअप के कम और एक इंप्रोमेटू सर्वर / क्लाइंट के अधिक लगता है।
deft_code

@caspin यह सबसे अधिक है यदि सभी पी 2 पी गेम नहीं चलाए जाते। एक खिलाड़ी मेजबान नामित किया गया है, और बाकी लोग उससे जुड़ते हैं।
AttackingHobo

2
@Hobo: यह P2p नहीं है , यह क्लाइंट / सर्वर है, इससे कोई फर्क नहीं पड़ता कि आप इसे कैसे कहते हैं।
ओ ० '।

1

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


Xbox 360 पर

-1

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

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