मैं ऐसे MMO को लागू कर रहा हूं जहां खिलाड़ी अपने स्टारशिप पर अंतरिक्ष में उड़ता है और इसे तीर कुंजी से नियंत्रित करता है और अन्य खिलाड़ियों के साथ सहयोग करता है।
मैं इसे लागू करना चाहता हूं ताकि खिलाड़ी अपने जहाज को रॉकेट या किसी और चीज से चकमा दे सके, इसलिए मैं सर्वर गेम के रूप में एक ही विश्व अनुकरणीय एल्गोरिदम का उपयोग करके क्लाइंट गेम पर पूरे खेल राज्य की भविष्यवाणी करने की कोशिश कर रहा हूं। यह गेम वर्ल्ड C # पर लिखा गया है और इसे क्लाइंट के अंदर सीधे (इसे Unity3D पर लिखा गया है) और CLR के माध्यम से C ++ सर्वर (लिनक्स के तहत) पर लिखा जाएगा। यूडीपी के माध्यम से कनेक्शन।
समस्या यह है कि कैसे बनाए रखा जाए, उदाहरण के लिए, एकल मानचित्र के भीतर 1000 खिलाड़ी (अन्य सभी खेल वस्तुओं, भीड़ को छोड़कर ...): आइए हम आपको बताएं:
- प्रति सेकंड 50 बार ग्राहकों के साथ सर्वर को सिंक्रनाइज़ करें
- प्रत्येक ग्राहक को उस गेम ऑब्जेक्ट (और खिलाड़ी) को भेजें जिसे वह देखने में सक्षम है (कुछ त्रिज्या के भीतर)
- प्रत्येक खिलाड़ी को अपने विचार त्रिज्या के भीतर 100 वस्तुओं को भेजना होगा
- प्रति गेम ऑब्जेक्ट औसतन 50 बाइट भेजना चाहिए (यह id, x, y coords, रोटेशन, राज्य ...)
इसलिए, इस तरह के नेटवर्क बैंडविड्थ की आवश्यकता होगी: 1000 (क्लाइंट) * 50 (प्रति सेकंड बार) * 100 (प्रत्येक खिलाड़ी को भेजने के लिए ऑब्जेक्ट) * 50 (प्रति ऑब्जेक्ट बाइट्स) = 250 000 000 प्रति सेकंड बाइट्स! यह नामुमकिन है!
क्या इस मूल्य को किसी तरह कम करना संभव है? उदाहरण के लिए, ग्राहकों को पूरी तरह से अपने खेल की दुनिया (समय की लंबी अवधि के लिए) का अनुकरण करने और उन्हें अन्य ग्राहकों के इनपुट भेजने और खेल की दुनिया को सिंक्रनाइज़ करने दें, मान लें कि प्रत्येक सेकंड में, लेकिन यह अस्थायी गणना के कारण पट्टे पर अजीब वंशानुक्रम के मुद्दों का कारण होगा। ।
वैसे भी, इस तरह के खेलों को सामान्य तरीके से कैसे प्रोग्राम किया जाता है? धन्यवाद।