सैकड़ों खिलाड़ियों के साथ सर्वर-साइड भौतिक सिमुलेशन


9

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

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

मुझे क्लाइंट-साइड में सभी भौतिकी सिमुलेशन को स्थानांतरित करने में कोई समस्या नहीं होगी, लेकिन तब मुझे वास्तव में मान्य करने के लिए एक तरीके की आवश्यकता होगी यदि क्लाइंट सिमुलेशन का परिणाम मान्य है। हालाँकि, मैं यह पता नहीं लगा सकता कि कैसे।

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

ग्लेन फिडलर द्वारा जीडीसी 2011 डेमो के रूप में भौतिकी जटिल हो जाएगी , शायद सरल भी। हालांकि, बहुत अधिक हमेशा टकराने वाले कठोर-शरीर एक ही दृश्य में होंगे और वे सभी एक ही बार में दिखाई देंगे।

मेरे पास इस विशेष मामले का जवाब पाने के लिए एक कठिन समय है, क्योंकि वेब पर अधिकांश संसाधन - फिर से, ग्लेन फिडलर्स साइट एक महान है - छोटे पैमाने पर नेटवर्क वाली भौतिकी के बारे में बोलते हैं (जैसे कि 30 खिलाड़ियों के साथ एक एफपीएस, जैसे हेलो)।

किसी भी सलाह, वेबसाइट, पेपर या विषय पर पसंद की बहुत सराहना की जाएगी।

जिन सवालों का जवाब मैं चाहूंगा, उनका एक उत्तर:

  • क्लाइंट-सर्वर मॉडल कितना संभव है? क्या मेरा सर्वर-प्रोसेसिंग पावर सरोकार वैध और ज़मीनी है?
  • क्या सर्वर पर क्लाइंट द्वारा चलाए जा रहे भौतिक सिमुलेशन को मज़बूती से सत्यापित करना संभव है? यदि हां, तो कैसे?

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

जब तक विभिन्न ग्राहक स्वतंत्र होते हैं, तब तक आपको क्षैतिज रूप से स्केलिंग करने में कोई समस्या नहीं होनी चाहिए। EC2 जैसी किसी चीज़ का उपयोग करें, आवश्यकतानुसार क्षमता ऑनलाइन लाएँ।
--पेट १et

1
अगर कोई एकल खिलाड़ी खेल में धोखा दे तो समस्या कहां है? बस उन्हें, बेहतर लीडरबोर्ड के विचार को छोड़ दें और एक मजेदार एकल खिलाड़ी गेम बनाने पर ध्यान केंद्रित करें
Maik Semder

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

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

जवाबों:


5

आप क्लाइंट-साइड को अन्य उपयोगकर्ताओं के सबमिशन को मान्य कर सकते हैं, और क्लाइंट के पास सर्वर की रिपोर्ट होती है यदि सबमिशन अमान्य लगता है।

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


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

1

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

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

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


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

नहीं, यह एक बात नहीं बदलेगी :)। सर्वर पर केवल रिप्ले स्टोर करें और केवल संदिग्ध लोगों की जांच करें (उदाहरण के लिए नए हाईस्कूल)
रॉय टी।

1

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

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

  • स्वचालित
  • आप जवाबदेही का त्याग नहीं करते
  • जैसा कि आप अपने प्लेयरबेस के एक बहुत छोटे उपसमूह का अनुकरण करते हैं, तो लोड प्रबंधनीय होगा, और यहां तक ​​कि स्केलेबल भी होगा (यदि आप लोड अधिक है तो अनुकरण करने के लिए कम खिलाड़ी चुनें)
  • हर खेल के लिए लागू, जो मैं सोच सकता हूँ, इतना पुन: प्रयोज्य

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

यदि भौतिकी इंजन नियतात्मक है (यह होना चाहिए) और सर्वर क्लाइंट के रूप में एक ही स्टार्ट स्टेट और इनपुट का उपयोग कर अनुकरण करता है (जो संभव होना चाहिए), तो परिणाम उचित फ्लोटिंग प्वाइंट त्रुटि सीमा (महत्वहीन) के भीतर होना चाहिए। यहां तक ​​कि अगर यादृच्छिक प्रभाव हैं, और यह आरएनजी राज्य के ऊपर से गुजरने के लिए संभव नहीं है, तो आप यादृच्छिक संख्याओं पर पास कर सकते हैं और उनका उपयोग चेकिंग के लिए कर सकते हैं (और यहां तक ​​कि उनके वितरण की जांच करें, अगर रैंडम रोल को ठगना एक बड़ा गेमप्ले अंतर बनाता है) ।
०et

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

@RoyT। मैं शायद वैसे भी करूँगा, भले ही मैं क्रेडिट के आधार पर पैसे नहीं देता (किसी ने मुझे लगता है कि गलत तरीके से?)। मेरा इरादा शून्य-सहिष्णुता की नीति का है, इसलिए मैं सत्यापन के लिए रीप्ले-फ़ाइल को बैच देता हूं। अगर यह वास्तव में संदिग्ध है, तो मैं कार्रवाई करता हूं।
लेनार्ड फोंटेइजन

1

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


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