मैं एक p2p मल्टीप्लेयर गेम कैसे बना सकता हूं? मैं एक सर्वर-कम मल्टीप्लेयर गेम करना चाहूंगा। लेकिन फिर, सभी ग्राहक एक-दूसरे को कैसे जानते हैं?
पी 2 पी-प्रोटोकॉल फाइल ट्रांसफर में इतना प्रसिद्ध क्यों है लेकिन मल्टीप्लेयर गेम में नहीं?
मैं एक p2p मल्टीप्लेयर गेम कैसे बना सकता हूं? मैं एक सर्वर-कम मल्टीप्लेयर गेम करना चाहूंगा। लेकिन फिर, सभी ग्राहक एक-दूसरे को कैसे जानते हैं?
पी 2 पी-प्रोटोकॉल फाइल ट्रांसफर में इतना प्रसिद्ध क्यों है लेकिन मल्टीप्लेयर गेम में नहीं?
जवाबों:
सहकर्मी से सहकर्मी खेलों में आमतौर पर अभी भी एक गेम होस्ट है। इसका गेम होस्ट जो गेम को मास्टर गेम सूची में पोस्ट करता है और नए कनेक्शन स्वीकार करता है। जब भी गेम होस्ट खेल के लिए एक नए ग्राहक को स्वीकार करता है तो यह नए ग्राहक के बारे में सभी मौजूदा ग्राहकों को सूचित करता है ताकि वे सुनिश्चित कर सकें कि वे नए ग्राहक से जुड़ सकते हैं।
P2p को लागू करने का सबसे सरल तरीका एक लॉबी है। सभी ग्राहक एक लॉबी (या चैट रूम) में मेजबान से जुड़ते हैं। जब मेजबान तैयार होता है तो खिलाड़ी प्रेस शुरू करता है और वे सभी एक ही समय में खेल में प्रवेश करते हैं (आमतौर पर रणनीति के खेल में उपयोग किया जाता है)। एक और अधिक जटिल दृष्टिकोण "ड्रॉप-इन ड्रॉप-आउट" का उपयोग करना है जहां खिलाड़ी मध्य खेल में शामिल हो सकते हैं और छोड़ सकते हैं, हालांकि यह पी 2 पी गेम में लागू करने के लिए बहुत अधिक जटिल है और इसके लिए होस्ट-माइग्रेशन नामक सुविधा की आवश्यकता होती है।
खेलों की एक अच्छी संख्या सहकर्मी से सहकर्मी नेटवर्किंग का उपयोग करती है, जिसमें अधिकांश रणनीति, खेल और ड्राइविंग खिताब शामिल हैं। बस के बारे में सभी Xbox360 और PS3 खेल P2p नेटवर्किंग का उपयोग करें। क्लाइंट-सर्वर आर्किटेक्चर ज्यादातर पहले व्यक्ति शूटर या MMO गेम में उपयोग किया जाता है।
क्लाइंट-सर्वर को आमतौर पर लागू करना आसान होता है क्योंकि केवल 1 मशीन से पूरे गेम की स्थिति का पता नहीं चलता है, क्लाइंट मूल रूप से चीजों को सुचारू बनाने के लिए कुछ भविष्यवाणी के साथ बस रेंडरर्स हैं।
जब आप पी 2 पी इंजन का निर्माण करते हैं, तो सभी ग्राहकों को खेल की दुनिया की पूर्ण स्थिति की आवश्यकता होती है और इन सभी को सिंक में रहने की आवश्यकता होती है।
पी 2 पी और क्लाइंट-सर्वर आर्किटेक्चर के बारे में अधिक जानकारी के लिए मेरा सुझाव है कि आप निम्नलिखित लेख पढ़ें: गेम नेटवर्किंग के बारे में हर प्रोग्रामर को क्या पता होना चाहिए ।
और अगर आप सामान्य रूप से नेटवर्किंग के लिए नए हैं तो उस साइट के अन्य बेहतरीन लेखों को चेकआउट करें। ग्लेन एक नेटवर्किंग प्रतिभा है।
कई कारण हैं गेम्स में पी 2 पी लोकप्रिय नहीं है, ज्यादातर लैग के कारण। हर कोई सबसे धीमा खिलाड़ी है। हम यहां बैंडविड्थ के बारे में बात नहीं कर रहे हैं, लेकिन पिंग टाइम।
पी 2 पी डेटा के टन को स्थानांतरित कर सकता है, लेकिन यह काफी उच्च पिंग के साथ ऐसा करता है, गेम को बहुत कम मात्रा में डेटा को कम से कम पिंग समय के साथ संचारित करने की आवश्यकता होती है।
पीयर-टू-पीयर सिस्टम और एक्शन गेम्स के बारे में कुछ दिलचस्प पहलू हैं। मैंने उन्हें ग्लेन फिडलर के ब्लॉग पर एक टिप्पणी के रूप में पोस्ट करने की कोशिश की, लेकिन जाहिर है कि वह गलत साबित होना पसंद नहीं करते और इसके बजाय पूरे लेख को खींच लिया। यह इंटरनेट आर्काइव पर है, यदि आप इसे पढ़ना चाहते हैं।
उन्होंने टिप्पणी को ऑनलाइन नहीं होने दिया, इसलिए मैं इसे यहां उद्धृत करूंगा:
पहली पोस्ट से पीयर-टू-पीयर सुझाव वास्तव में एक दिलचस्प शुरुआती बिंदु है, भले ही यह कई बार थोड़ा सा भोला हो: पहली संभावना यह होगी कि आप अपने पोस्ट में उल्लिखित भविष्यवाणी के साथ एक मानक क्लाइंट / सर्वर मॉडल के साथ सिस्टम को संयोजित करें। गेम नेटवर्किंग के बारे में। कम P2P पिंग नाटकीय रूप से अपने स्थान के आधार पर खिलाड़ियों के बीच की भविष्यवाणी की कमी को कम करेगा: प्रभाव संभवतः अधिकांश अमेरिकी गेमर्स के लिए दिखाई नहीं देगा, लेकिन यहां यूरोप में 200+ के पिंगिंग अधिकांश सर्वरों पर सामान्य हैं और एक सीधा कनेक्शन कम हो जाएगा। एक यूरोपीय सर्वर के लिए भविष्यवाणी अंतराल।
सर्वर के बिना एक सच्चा पी 2 पी दृष्टिकोण थोड़ा अधिक जटिल है: विकेन्द्रीकृत नेटवर्क के साथ एक मुख्य चिंता निरंतरता सुनिश्चित कर रही है, खासकर अगर नेटवर्क या फ्लोटिंग पॉइंट मुद्दों पर भेजे गए आदेशों के थोड़े अलग समय के कारण सिमुलेशन तितली के प्रभाव से पीड़ित हो सकता है। यह कम से कम समय-समय पर प्रत्येक वस्तु (खिलाड़ी, एनपीसी, ...) की स्थिति की नेटवर्किंग द्वारा संभव है। यह सभी वस्तुओं के लिए एक बार में करना भी आवश्यक नहीं होगा, और प्रत्येक ग्राहक कुछ वस्तुओं पर कब्जा कर सकता है। एक निश्चित समय में पर्याप्त वस्तुओं को संजोकर रखने से उस अंतर को कम करना चाहिए जो किसी वस्तु के प्रत्येक तुल्यकालन के बीच पर्याप्त होता है, जो एक सेकंड या उससे अधिक के सिंक-अंतराल के लिए भी अप्रासंगिक हो जाता है।
पी 2 पी सिस्टम के साथ दूसरी समस्या सुरक्षा है, लेकिन इस मामले में एक अपेक्षाकृत छोटे फिक्स के साथ हल किया जा सकता है: ग्राहक प्रत्येक भौतिकी ऑब्जेक्ट पर त्रुटि स्तर के बारे में जानकारी एकत्र करने के लिए अपने भौतिकी सिमुलेशन का उपयोग कर सकते हैं। हेरफेर की गई भौतिकी में हमेशा एक बड़ी त्रुटि होती है, इसलिए ग्राहक एक संदिग्ध वस्तु को नियंत्रित करने वाले सहकर्मी से डिस्कनेक्ट करने के लिए बस "वोट" देंगे। इसके अतिरिक्त, गैर-भौतिकी वस्तुओं के लिए नियंत्रण संदेशों को उनके महत्व के आधार पर ग्राहकों के बीच अग्रेषित किया जाता है: प्लेयर अपडेट को बेतरतीब ढंग से आगे बढ़ाया जा सकता है, महत्वपूर्ण और निराला अपडेट हमेशा भेजा जाना चाहिए, लेकिन फिर भी एक यादृच्छिक खिलाड़ी को। इस तरह एक खिलाड़ी को किसी भी ध्यान देने योग्य तरीके से धोखा देने में सक्षम ग्राहकों के एक बड़े हिस्से को नियंत्रित करना होगा।
[...]
आप उस सूत्र को पा सकते हैं जिसका मैं http://www.devmaster.net/forums/showthread.php?t=14640 पर उल्लेख कर रहा हूं ।
मुझे लगता है कि किसी ने फ़ायरवॉल समस्याओं का उल्लेख किया है जो सहकर्मी से सहकर्मी के लेख में से एक में है। एक संभावित समाधान NAT-Punchthrough होगा:
- NAT Punchthrough अवलोकन
- पीयर-टू-पीयर कम्युनिकेशन अक्रॉस स्क्रिप्ट एड्रेस एड्रेस
100% सफलता दर नहीं है, इसलिए आपको खिलाड़ियों को वैसे भी एक पोर्ट खोलने के लिए कहना चाहिए।
Good ट्रू पीयर-टू-पीयर ’गेमप्ले का एक अच्छा उदाहरण स्टारक्राफ्ट जैसे वास्तविक समय की रणनीति गेम होगा।
गति में सैकड़ों इकाइयों / प्रोजेक्टाइल के साथ एक गेम में, बार-बार यूनिट पोजीशन / स्टेट्स को नेटवर्क पर अन्य सभी खिलाड़ियों को भेजना व्यावहारिक नहीं है, इसलिए यहां एक समाधान सभी खिलाड़ियों के लिए (सटीक समान) सिमुलेशन को सिंक में चलाने का है।
जब एक खिलाड़ी एक क्रिया करता है, तो कमांड / आदेश ('एक्स, वाई के लिए जार्गलिंग ले जाएँ') अन्य सभी खिलाड़ियों को भेजा जा सकता है, सिमुलेशन के सभी उदाहरणों द्वारा एक दूसरे के बाद के एक अंश को निष्पादित किया जा सकता है।
इस स्थिति में, यदि कोई खिलाड़ी डिस्कनेक्ट करता है, तो खेल जारी रह सकता है - चूंकि गेम चलाने के लिए सर्वर / होस्ट की कोई आवश्यकता नहीं है, शेष खिलाड़ी ले जा सकते हैं।
हालांकि, गेम को सिंक में रखना गैर-तुच्छ है, आपको गेम लॉजिक अपडेट के लिए एक निश्चित टाइमस्टेप का उपयोग करना होगा, और यादृच्छिक संख्या जनरेटर के उपयोग और सीडिंग के साथ बहुत सावधान रहना होगा, ताकि यह सुनिश्चित हो सके कि सिमुलेशन डायवर्ट नहीं होगा!
यह दावा करना थोड़ा असंगत होगा कि यह खेलों के लिए प्रसिद्ध नहीं है जब अधिकांश रियल टाइम स्ट्रेटेजी गेम्स (स्टार क्राफ्ट श्रृंखला, कमांड और कॉनकॉर सीरीज़) और कई एफपीएस गेम्स (कॉल ऑफ़ ड्यूटी: मॉडर्न वारफेयर 2) इसका उपयोग करते हैं।
इसने कहा कि खेल के बारे में कोई कैसे सीखता है कि आप जिस मैचिंग या लॉबिंग सेवा का उपयोग करते हैं या बनाते हैं, वह है। लेकिन यहां तक कि एक बार खेल के बारे में जानने के बाद भी, एक या एक से अधिक साथी हो सकते हैं जो दूसरों की तुलना में अधिक समान हैं। खेलने के इच्छुक 3 ग्राहकों के मामले पर विचार करें, एक खुले नट के पीछे, 2 सख्त (बंद) नट के पीछे। ओपन नेट पीयर अन्य दो से कनेक्शन ले सकता है। लेकिन 2 सख्त एक दूसरे से सीधे कनेक्ट नहीं हो सकते हैं, उन्हें पैकेटों को रिले करने के लिए खुली नेट की आवश्यकता होगी। यदि खेल से खुला नेट पीयर गिरता है, तो या तो किसी अन्य रिले को ढूंढना होगा या खेल बाधित हो जाएगा।
आप शायद एक खिलाड़ी के साथ दौड़ना चाहते हैं (हम उसे "होस्ट" कहेंगे) एक गैर आधिकारिक सर्वर के रूप में। आपके पास अन्य सभी खिलाड़ी होंगे जो हमारे मेजबान के साथ उनके अंत पर संवाद कर रहे हैं, और मेजबान अन्य खिलाड़ियों को संदेश भेजेगा।
आप शायद एक सूची भी पास करना चाहते हैं कि कौन से कंप्यूटर होस्टिंग प्लेयर से जुड़े हैं ताकि अगर वे ड्रॉप करें तो एक नया होस्ट किसी भी तरह से चुना जा सके और शेष खिलाड़ियों से संवाद शुरू कर सकें।
Smartfoxserver के लिए दस्तावेज़ीकरण आपकी मदद कर सकता है और / या आप इसे अपने खेल के लिए भी उपयोग करना चाहते हैं। आप केवल एक अलग क्लाइंट और सर्वर प्रोग्राम रखने के बजाय इसे अपने क्लाइंट गेम में एम्बेड करेंगे।
मुझे इस मामले में थोड़ी दिलचस्पी है। आप कह रहे हैं कि क्लासिक क्लाइंट-सर्वर मॉडल के बजाय गेम पी 2 पी बनाने के साथ बहुत सारी समस्याएं हैं। लेकिन मुझे पूरा यकीन है कि पी 2 पी क्लाइंट-सर्वर की तरह है लेकिन हर सहकर्मी के पास सर्वर बनने का मौका है। LAG के बारे में यदि u सर्वर के रूप में एक और मशीन जोड़ते हैं तो अधिक संभावनाएं हैं कि कई क्लाइंट सर्वर से आगे हैं, लेकिन P2p का उपयोग करने से लॉबी यू में कोई अतिरिक्त मशीन नहीं हैं, विलंबता परीक्षणों का प्रबंधन कर सकते हैं और न्यूनतम पिंग के साथ समूह बना सकते हैं। ट्रैफ़िक जनरेटिंग के बारे में, जैसा कि मैंने सीखा है कि आपको ग्राहकों को कम से कम संचारित करने के लिए कहना होगा, इसका मतलब है कि ग्राहकों को यह पता लगाना होगा कि अन्य सभी ग्राहक क्या करने के इच्छुक हैं।
यदि आप कम प्रणाली की आवश्यकताओं के साथ एक अपेक्षाकृत सरल दिखने वाले mmorpg बना रहे हैं, तो मैं एक आंतरिक प्रोग्राम बनाने का सुझाव दूंगा जो गेम के फ़ोल्डर की सामग्री के आधार पर एक "आवृत्ति" बनाता है और जिसमें फाइलें शामिल हैं। यह एक ही चैनल पर एक ही "आवृत्ति" वाले लोगों को बना देगा। मॉडल्ड, जोड़-तोड़ या सामान्य ग्राहकों को अलग किया जाएगा। यह केवल देशी हैक या मॉड के लिए काम करेगा, लेकिन मुझे यकीन है कि यह "डंब" थिएटरों को कवर करता है। त्रुटि जाँच विधि के साथ संयुक्त रूप से उल्लेखित एक व्यक्ति का मतलब है कि कोई मॉडरेशन आवश्यक नहीं है। जहाँ तक पोर्ट जाते हैं, बस इसमें पोर्ट 52225 एक बैकग्राउंड प्रोसेस के साथ होता है जो इसे ट्रिगर-पोर्ट्स के बिना राउटर पर प्लग करता रहता है।