2010-07-12 35 views
10

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

एएसपी.नेट एमवीसी वेब सर्वर मैंने क्लाइंट द्वारा पिछले वेब पेज में सर्वर पर कुछ वेब पेज डेटा के लिए अनुरोध भेजने का उपयोग किया है और सर्वर एचटीएमएल या एक्सएमएल या जेएसओएन उत्पन्न करता है और इसे क्लाइंट में लौटाता है एक HTTP पैकेट। यह प्रक्रिया एक मल्टीप्लेयर गेम के लिए बिल्कुल वही लगता है, सिवाय इसके कि क्लाइंट शायद HTML का अनुरोध नहीं करेगा, लेकिन एक्सएमएल या जेएसओएन डेटा का अनुरोध करना सही होगा?

तो मेरी सवाल कर रहे हैं ...

  1. एक खेल सर्वर ASP.NET MVC का उपयोग कर लिखा जा सकता है और मेरे द्वारा तैयार किया गया एक RESTful API का उपयोग कर एक वेब सर्वर के रूप में ही काम करते हैं?
  2. क्या एक्सएमएल या जेएसओएन डेटा के साथ HTTP पैकेट का उपयोग करने से गेम डेटा का अनुरोध करने और प्राप्त करने का बेहतर तरीका है? गेम सर्वर से लौटाया जा रहा डेटा छोटा होगा।
  3. किसी वेब सर्वर से डेटा तक पहुंचने के लिए एक विश्वसनीय API का उपयोग करना अच्छी समझ में आता है, लेकिन गेम सर्वर से गेम डेटा का अनुरोध करने के लिए एक विश्वसनीय API का उपयोग करना समझ में नहीं आता है, और वास्तव में, ऐसा लगता है जैसे इससे सुरक्षा समस्याएं हो सकती हैं, आपका विचार?
  4. आखिरकार, क्या कोई भी अच्छी गेम किताबों की सिफारिश कर सकता है जो एक सभ्य गेम सर्वर बनाने के तरीके पर उदाहरण दिखाते हैं?

आपकी मदद के लिए अग्रिम धन्यवाद!

+1

डब्ल्यूसीएफ सेवाएं शायद एमवीसी की तुलना में अधिक समझदार होंगी, क्योंकि वास्तव में कोई यूआई नहीं है, केवल डेटा एक्सचेंज है। – Jason

+0

@ जेसन, धन्यवाद! यह वास्तव में अच्छा लग रहा है। – BeachRunnerFred

उत्तर

3

वेबसर्वर एक महत्वपूर्ण घटक ...

आईई याद कर रहे हैं। वे स्टेटलेस हैं। वेब का पूरा प्लेटफ़ॉर्म (और सामान्य रूप से HTTP सर्वर) पैटर्न पर आधारित होता है कि वे स्टेटलेस हैं जिसका अर्थ है कि जब आप पेज-टू-पेज से स्विच करते हैं तो वे डेटा पर नहीं होते हैं।

सीमा के आस-पास के तरीके हैं।क्लाइंट-साइड पर: ब्राउज़र खोलने के दौरान आप डेटा रखने के लिए सत्र का उपयोग कर सकते हैं; या लंबी अवधि में डेटा स्टोर करने के लिए कुकीज़। सर्वर-साइड पर: डेटाबेस आमतौर पर राज्य दीर्घकालिक स्टोर करने के लिए उपयोग किया जाता है। तो ...

  1. हाँ, पर कितना और कब तक आप एक खेल सत्र के राज्य संग्रहीत करना चाहते हैं पर निर्भर करता है, आप देख सकते हैं कि (क वेबसर्वर के रूप में और नहीं) अलग से खेल सर्वर/इंजन चल रहा भविष्य में स्केल/बढ़ने के लिए आपको बहुत अधिक जगह मिल जाएगी।

  2. हां, और नहीं ... एक्सएमएल/जेएसओएन इंटरनेट के आसपास ऑब्जेक्ट स्टेटस पास करने का बहुत अधिक तरीका है क्योंकि यह सरल और प्लेटफॉर्म-स्वतंत्र है। चूंकि आप अपना खुद का सर्वर बैकएंड लिख नहीं सकते हैं, इसलिए मैं सुझाव दूंगा कि आप अपने स्वयं के समाधान को स्क्रैच से रोल करने पर विचार करने से पहले XML-RPC का उपयोग करने में एक नज़र डालें।

  3. मुझे यकीन नहीं है कि आप सुरक्षा के बारे में भद्दा क्यों हैं। यदि आप एक स्वीकार्य अनुरोध/प्रतिक्रिया चक्र के लिए एक सख्त सख्त पहुंच नीति लागू करते हैं तो कोई समस्या नहीं होनी चाहिए। जैसा कि मैंने पहले कहा था, एक्सएमएल-आरपीसी में देखें। कुंजी यह है कि उपयोगकर्ता को किसी भी गेम सर्वर डेटा की आवश्यकता के मुकाबले एक्सेस न दें।

  4. नहीं, ज्यादातर क्योंकि मैं गेम नहीं लिखता हूं। हालांकि, मेरे पास क्लाइंट/सर्वर आर्किटेक्चर ऐप्स लिखने का अनुभव है और यह रॉकेट सर्जरी नहीं है। मेरा सुझाव है कि आप बीटा हिट करने वाले लगभग Game Development स्टैक एक्सचेंज अकसर किये गए सवाल साइट में शामिल होने का एक नज़र डालें।

+0

धन्यवाद, इवान, यह एक्सएमएल-आरपीसी वास्तव में अच्छा दिखता है। क्या आपने कभी भी .NET कार्यान्वयन का उपयोग किया है? यदि हां, तो कोई सुझाव/सिफारिशें? – BeachRunnerFred

+0

@BeachRunner जो नहीं मैंने नहीं किया है। मैंने केवल एक्सएमएल-आरपीसी लाया क्योंकि यह एक प्रसिद्ध और अच्छी तरह से webservice वास्तुकला है। यदि आप इसके साथ शुरुआत करना चाहते हैं, तो स्टैक ओवरफ़्लो में वास्तव में इसका उपयोग करने वाले लोगों से बहुत सारी जानकारी होनी चाहिए। शुरू करने के लिए इसे देखें। http://stackoverflow.com/questions/1348503/how-to-use-xmlrpc-in-c –

8

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

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

एक आरईएसटी एपीआई का उपयोग करना ऐसी कोई समस्या नहीं है, क्योंकि आप पहले से उपयोग की जाने वाली मानक प्रमाणीकरण तंत्र का उपयोग कर सकते हैं।

"Beautiful Architecture" पुस्तक का अध्याय 3 डार्कस्टार (अब RedDwarf) प्रोजेक्ट के आर्किटेक्चर का वर्णन करता है, जो ऑनलाइन गेम और आभासी दुनिया के लिए एक स्केलेबल एप्लिकेशन सर्वर है। जबकि RedDwarf का स्तर आप जो चाहते हैं उससे काफी बड़ा है, पुस्तक वर्णन करती है कि गेम सर्वर बनाने के दौरान आपको क्या पता होना चाहिए।

संबंधित मुद्दे