यह MMO प्रदर्शन से संबंधित है, सिवाय इसके कि बैंडविड्थ के बारे में प्रश्न है। यह सीपीयू लोड के बारे में है।
मैंने नोड.जेएस और वेबजीएल का उपयोग करते हुए एक साधारण एफपीएस एक साथ रखा। यह बेहद सरल है, मिडी भूलभुलैया के बडीमेज़ क्लोन की तरह। बहुत कम चल रहा है, हर कोई दो आयामों (कोई ऊंचाई) में नहीं चलता है, सरल प्रोजेक्टाइल शूट करता है, और दीवारों में चलता है।
अभी, अगर मैं सर्वर से कई संबंध बनाता हूं, जहां प्रत्येक खिलाड़ी मंडलियों में कताई करते समय तेजी से गोली मारता है, तो मैं खेल में लगभग 15 - 20 खिलाड़ियों को प्राप्त कर सकता हूं, इससे पहले कि सर्वर एक कोर को अधिकतम करता है और नीचे की ओर धीमा हो जाता है। और यह है जब सर्वर पर 30 एफपीएस पर चल रहा है। 10 एफपीएस पर, मुझे लगभग 25 - 30 कनेक्शन मिलते हैं। यह बहुत बुरा है, क्योंकि खेल जल्द ही बहुत कुछ करने वाला है और मुझे इसके लिए अधिक खिलाड़ियों को फिट करने की आवश्यकता होगी ताकि यह संभव हो सके।
मेरे भाई ने अपने सहकर्मी के TF2 सर्वर के बारे में कुछ आंकड़े बताए। उसका सर्वर हमारी तुलना में कम चश्मा है, फिर भी यह TF2 चलाता है, जाहिर है एक अधिक जटिल गेम, प्रति सेकंड 500 टिक पर, 36 उपयोगकर्ता प्रति कोर के साथ। इसके अलावा, हम वर्तमान में उनकी तुलना में अधिक बैंडविड्थ का उपभोग करते हैं, लेकिन हम अभी तक इसे कम करने की कोशिश नहीं कर रहे हैं।
यह कैसे संभव है? इस परिमाण में सर्वर के प्रदर्शन को बढ़ाने के लिए किस तरह की चालें हैं? कुछ चीजें जिन्हें मैं जानता हूं उनमें शामिल हैं:
- सर्वर पर फ्रैमरेट को कम करना, और क्लाइंट पर पदों को अलग करना। मुझे कुछ लाभ हुआ, लेकिन स्पष्ट रूप से TF2 सर्वर भी इससे परेशान नहीं है।
- क्लाइंट पर टकराव का पता लगाने जैसी महंगी चीजें करना, और इसे सर्वर पर बार-बार सत्यापित करना। मैंने इसे अभी तक स्थानांतरित नहीं किया है, मैं आज रात करूंगा। यहां तक कि मैं इस तरह के एक विशाल लाभ की उम्मीद नहीं है।
- गणना को कम करने के लिए क्षेत्रों (क्वाड ट्री) में खेल के मैदान को तोड़ दें। अभी तक इसके लिए एक अवसर नहीं था।
- मैंने दुर्भाग्यपूर्ण संभावना पर विचार किया है कि TF.js केवल जिस तरह से TF2 का उपयोग कर रहा है, उससे अधिक धीमा है, और इस तरह के उच्च तीव्रता वाले कार्य के लिए अनुकूल नहीं हो सकता है।
- यह सब सर्वर कॉन्फ़िगरेशन जादू में है?
तो क्या सर्वर पर आवश्यक न्यूनतम करने के लिए उद्योग के अन्य चालें हैं लेकिन फिर भी एक निर्दोष खेल का अनुभव है? "सीपीयू को बचाने के लिए क्लाइंट को टालना" और "ग्राहक पर भरोसा न करना" के बीच एक बड़ा संघर्ष है, इसलिए शायद यह जानने में मदद मिलती है कि विभिन्न स्थितियों में लाइन कहाँ खींची गई है?
अपडेट करें
प्रोफाइलिंग वास्तव में एकमात्र मंत्र है जो मैंने कभी पाया है कि यह बिल्कुल अचूक है। मैंने अपने कोड (धन्यवाद, FP!) के आस-पास कुछ टाइमिंग फ़ंक्शंस को जल्दी से लपेट दिया और मुझे पता चला कि मैंने कभी भी उम्मीद नहीं की थी: लगभग सभी निष्पादन समय के लिए ग्राहकों के डेटा को प्रसारित करने का कार्य। विशेष रूप से, लगभग 90%। आगे के परीक्षण से पता चला कि यह समय ग्राहकों की संख्या और डेटा के आकार दोनों पर निर्भर है, लेकिन बाद में ऐसा होता है। एक 20 उपयोगकर्ता लोड पर, मैंने अपने प्रसारण समय को 90%, 24ms से घटाकर केवल 2ms से अधिक पूर्ण डेटा के बजाय केवल "{}" भेज दिया। लेकिन केवल 5 उपयोगकर्ताओं के साथ, प्रसारण में लगभग 0.5 एमएस लगता है। इसलिए मुझे स्पष्ट रूप से यहां कुछ अनुकूलन करने की आवश्यकता है।
पहला सबसे स्पष्ट सुधार दृष्टि की जाँच की रेखा है। यह उन लोगों की संख्या को कम करेगा जो डेटा की परवाह करते हैं, और इच्छुक पार्टियों को भेजे गए डेटा की मात्रा भी। क्या इस दायरे में अन्य प्रयास हैं जो मैं कोशिश कर सकता हूं, जो मेरे प्रसारण संचालन की लागत को कम करने पर ध्यान केंद्रित करते हैं?