डिस्क्लेमर: मेरा गेम प्रोग्रामिंग अनुभव क्लाइंट-साइड सिंगल प्लेयर गेम्स के आसपास है, लेकिन मेरे पास वेब एप्लिकेशन (विशेष रूप से Microsoft स्टैक) पर एक पृष्ठभूमि है, इसलिए मैं इस उत्तर के साथ आ रहा हूं, मुझे लगता है कि मैं बहुत कुछ कर सकता हूं लागू करें, लेकिन वास्तविक परीक्षण के बिना एक वास्तविक गेम सर्वर को यह कहना मुश्किल है कि यह कैसे लागू होगा, लेकिन यहां जाता है। यह जानिए: मैंने एक गेम सर्वर की तैनाती नहीं की है, केवल वेबएप्स।
मैं एक दो (सर्वर) स्तरीय दृष्टिकोण का सुझाव दूंगा। एक डेटाबेस टियर और एक "एप्लिकेशन" टियर; तीसरे (प्रस्तुति) के साथ टियर आपका गेम क्लाइंट है।
संबंधपरक डेटाबेस, डेटा क्वेरी में महान हैं, और डेटा लिखने में सभ्य हैं। कुंजी यह है कि आपके डेटाबेस को प्रबंधनीय आकार के टुकड़ों में लिखा जाता है जो आपके क्लस्टर को संभाल सकते हैं। SQL सर्वर का अधिक उन्नत संस्करण (डेटा केंद्र / एंटरप्राइज़) क्लस्टरिंग और प्रतिकृति का समर्थन करता है। मैं एक छोटे से क्लस्टर का निर्माण शुरू करूंगा और इसके खिलाफ कुछ सवाल चलाऊंगा कि यह कैसे काम करता है।
एप्लिकेशन टियर में, यदि आप "ज़ोनिंग" या ऐसा ही कुछ कर रहे हैं, तो आप संभवत: किसी भी क्लस्टर को सेट किए बिना दूर हो सकते हैं, और बस एक सर्वर प्रति जोन सेट कर सकते हैं। यदि आपके क्षेत्र बड़े हो जाते हैं, तो आप प्रत्येक क्षेत्र के लिए एक क्लस्टर सेटअप कर सकते हैं।
आप अनुप्रयोग टियर -> डेटाबेस टियर से डेटा भेजने के लिए एक क्रमांकन प्रक्रिया का निर्माण करना चाहेंगे। कुंजी के लिए कई स्तर के क्रमांकन चल रहे हैं। कुछ इस तरह :
- स्तर 1: DB के लिए हर एक्स सेकंड में सहेजें, महत्वपूर्ण डेटा शामिल हैं:
- खिलाड़ी स्वास्थ्य
- प्लेयर आइटम / पिकअप
- स्तर 2: DB को हर 2X सेकंड में सहेजें, मध्यम डेटा शामिल हैं:
- खिलाड़ी स्थानों
- एनपीसी स्थान
- स्तर 3: बाकी सब कुछ, जितना संभव हो उतना बार
यह आपके लेखन को सुसंगत और पूर्वानुमेय बनाए रखेगा, आपके खेल की प्रकृति के आधार पर, आप निराला डेटाबेस लिख सकते हैं। कुंजी यह महसूस करना है कि यदि आपका एप्लिकेशन सर्वर क्रैश हो गया है, तो आपको अपने डेटाबेस में राज्य से ऑनलाइन वापस आना होगा, इसलिए हर 90 मिनट में खिलाड़ी सूची को क्रमबद्ध करने से खिलाड़ी परेशान हो सकते हैं।
डेटा पढ़ने के लिए, आप एप्लिकेशन टियर में जितना संभव हो उतना मेमोरी में लोड करना चाहेंगे, फिर यह सुनिश्चित करें कि आपका सभी कोड इस मेमोरी पूल का उपयोग करता है, पृष्ठभूमि में आप डेटाबेस के साथ मेमोरी पूल को सिंक्रनाइज़ कर सकते हैं। जैसा कि जो बताते हैं, ऐसे समय होंगे जब आपको "वास्तविक समय" लेनदेन की आवश्यकता होगी। अपने अधिकांश लेखन को क्रमबद्ध करके, आपके पास डेटाबेस सर्वर / क्लस्टर पर पर्याप्त हार्डवेयर की आवश्यकता होने पर, वास्तविक समय में लेनदेन करने के लिए आपके डेटाबेस पर पर्याप्त IO होना चाहिए।