खेल इंजन डिजाइन: मल्टीप्लेयर और सुनने के सर्वर [बंद]


10

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

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

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

  • गेमिंग उद्योग में सुन-सर्वर मॉडल का उपयोग कितनी बार किया जाता है?
  • इसके (डिस) फायदे क्या हैं?
  • मेरे पास अन्य विकल्प क्या हैं?

4
पहला सवाल बहुत अप्रासंगिक है। यह क्यों मायने रखता है कि उद्योग कैसे करता है? वे सब कुछ सबसे अच्छा तरीका नहीं है।
कम्युनिस्ट डक

जवाबों:


11

मैं देखूंगा कि क्या मैं इसका सबसे अच्छा जवाब दे सकता हूं:

गेमिंग उद्योग में सुन-सर्वर मॉडल का उपयोग कितनी बार किया जाता है?

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

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

बेशक, सबसे बड़ा क्लाइंट-सर्वर मॉडल MMO मॉडल है, जहां एक या कई सर्वर एक स्थायी दुनिया चलाते हैं जो लगभग सभी डेटा और तर्क को संभालता है। इस मॉडल का उपयोग करने वाले कुछ और प्रसिद्ध गेम हैं जो कि World of Warcraft, Everquest, जैसे कुछ भी हैं।

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

इसके (डिस) फायदे क्या हैं?

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

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

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

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

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

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

हालाँकि, इन समस्याओं के बावजूद, सुनने वाले सर्वरों के कुछ फायदे हैं।

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

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

कम संसाधन : अधिकांश समर्पित सर्वरों में, समान IP वाला उपयोगकर्ता समर्पित सर्वर से कनेक्ट नहीं हो सकता है (मतलब, क्लाइंट को सर्वर को होस्ट करना चाहिए, या खेलना चाहिए, वे दोनों नहीं कर सकते हैं)। यदि ग्राहक अपने स्वयं के सर्वर पर खेलना चाहता है, तो उन्हें आमतौर पर सर्वर को होस्ट करने, या समर्पित सर्वर खरीदने या किराए पर लेने के लिए दूसरी मशीन की आवश्यकता होगी ताकि वे वास्तव में उस पर खेल सकें। एक सुनने वाले सर्वर को केवल एक मशीन की आवश्यकता होती है, जो ग्राहक द्वारा उपयोग की जाने वाली एकमात्र चीज हो सकती है।

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

अंततः:

मेरे पास अन्य विकल्प क्या हैं?

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

कृपया मुझे बताएं कि क्या मैंने आपके प्रश्न का उत्तर नहीं दिया है, या यदि आपको कुछ विस्तारित करने की आवश्यकता है, और मैं देखूंगा कि मैं क्या कर सकता हूं।


"अधिकांश समर्पित सर्वरों में, समान IP वाला उपयोगकर्ता समर्पित सर्वर से कनेक्ट नहीं हो सकता (मतलब, क्लाइंट को सर्वर को होस्ट करना चाहिए, या खेलना चाहिए, वे दोनों नहीं कर सकते हैं)।" WAT? कहाँ पे? क्यों? अगर कुछ सर्वरों में यह स्पष्ट रूप से संवेदनहीन मनमानी सीमा है, तो इसका मतलब यह नहीं है कि वह ऐसा करने के लिए मजबूर होगा जब वह एक लिखता है ...
0'0 '।

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