बैंडविड्थ कम रखने के लिए MMO तकनीक, एल्गोरिदम और संसाधन?


9

क्या कोई भी संसाधन और प्रलेखन है कि कैसे वर्तमान MMOs एक्शन और मूवमेंट डेटा को कम्प्रेशन से लेकर क्लाइंट तक पहुँचाने तक का काम संभालते हैं? आंदोलन भविष्यवाणी एल्गोरिदम के लिए कोई संसाधन?

मैं विशेष रूप से उन लोगों में दिलचस्पी रखता हूं जिनके पास wsad आंदोलन है और विलंबता को कम रखने पर ध्यान केंद्रित करते हैं। विभिन्न प्रकार के MMOs (नेटवर्क वार) के लिए पैकेट दर और आकार क्या है?

अगर खिलाड़ी नहीं पहुंच सकता है या बाद के मामले में उन्हें देख सकता है तो क्या पैकेट दर या एकमुश्त पैकेट को निष्क्रिय करने का एक तरीका है?

जवाबों:


9

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

यह महसूस करना महत्वपूर्ण है कि एक व्यावहारिक दृष्टिकोण से यह एक इंडी / शौक डेवलपर के लिए एक खेल को एक साथ रखने के लिए कठिन है, जो कि पर्याप्त रूप से पर्याप्त खिलाड़ियों को एक सैद्धांतिक शिखर समरूपता प्राप्त करने के लिए पर्याप्त रूप से लोकप्रिय बना देगा, जिसे "बड़े पैमाने पर" माना जाता है। लेकिन तकनीक अभी भी अनुसंधान के लिए शैक्षिक हो सकती है।

आप कर सकते हैं चीजों के दो प्रमुख वर्गीकरण हैं:

  • ग्राहकों को न्यूनतम सेट डेटा की न्यूनतम मात्रा भेजने के बारे में आक्रामक रहें, जिन्हें इसकी आवश्यकता है।
  • एक ऐसा गेम डिज़ाइन करें जो खिलाड़ियों को बहुत अधिक झगड़ने का प्रोत्साहन नहीं देता है, आपको सामान्य रूप से छोटी चीज़ों की ज़रूरत वाले "ग्राहकों के सेट" को बनाए रखने में मदद करता है।

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

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

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

पैकेट दर और आकार गेम से गेम में व्यापक रूप से भिन्न होते हैं, जैसे कि यह गैर-MMO गेम के लिए होता है। यह वास्तव में एक बहुत ही विशिष्ट-विशिष्ट चीज है और सामान्यीकृत मानक नहीं हैं।


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

5

उपरोक्त उत्तर के अलावा, TCP_NODELAY पर पढ़ें और विंडो स्केलिंग कैसे संचालित होती है। टीसीपी के विवरण को समझना (और हां, आप टीसीपी नहीं यूडीपी का उपयोग करना चाहते हैं जब तक कि ऑर्डर से बाहर आने वाले अंतर अपडेट को संभालने की संभावना आपके लिए मजेदार हो) और विलंबता नियंत्रण के लिए रिट्रांसमिशन महत्वपूर्ण है।


4
मैं दोहराऊंगा कि यदि आप डिफरेंशियल अपडेट (आमतौर पर इन-गेम स्ट्रक्चर्स का बाइनरी डिफरेंशियल) इस्तेमाल कर रहे हैं और आप आउट-ऑफ-ऑर्डर डिलीवरी (विश्वसनीय या नहीं) के साथ कुछ भी इस्तेमाल करते हैं, तो आपको पछतावा होगा। गेमिंग में टीसीपी को नापसंद करने वाले लोग आमतौर पर इसके बारे में पर्याप्त नहीं जानते हैं (जैसे कि NODELAY क्या करता है)। यूडीपी आवाज डेटा जैसे सामान के लिए समझ में आता है, जहां आउट-ऑफ-ऑर्डर पैकेट बस गिराए जा सकते हैं, यह एक गेम में शायद ही कभी होता है।
कोडरंगर

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

2
"बशर्ते कि सर्वर मुझे आधिकारिक गेम दे रहा है हर फ्रेम में" निश्चित रूप से, यदि आप एक के रूप में व्यवहार करते हैं। ध्यान दें कि मैंने कहा "यदि आप अंतर अपडेट का उपयोग कर रहे हैं" जो कि पूरे राज्य के हर फ्रेम को स्ट्रोब करने के विपरीत होगा। दुनिया के लिए जटिलता के किसी भी स्तर के साथ एक MMO में यह अक्सर पूर्ण अद्यतन जहाज करने के लिए असंभव हो जाएगा कि अक्सर।
कोडरंगर

1
यहां तक ​​कि अगर चीजों को बदलने की पूरी स्थिति भेजते हैं, तो आप आउट-ऑफ-ऑर्डर डिलीवरी के मुद्दों के साथ समाप्त होते हैं, जहां चीजों को एक साथ विलय करना संभव हो सकता है। अपडेट के बारे में सोचो "x = 1, y = 2" और फिर "y = 1, z = 2"। यदि वे पीछे की ओर आते हैं तो आप "पहले" को छोड़ना चाहते हैं ताकि y का मान सही हो, लेकिन फिर आप x में परिवर्तन खो देते हैं।
कोडरंगर

1
@ अदम जो कि मैंने कहा है कि आपको टीसीपी कल्पना को पढ़ना चाहिए और यह समझना चाहिए कि विंडो स्केलिंग कैसे काम करती है और यह रिट्रांसमिशन के साथ कैसे इंटरैक्ट करती है ;-) टीसीपी को फिर से लिखना हमेशा गलत होता है, इसे खराब करने की संभावना 100% के करीब होती है। यदि आप विश्वसनीय, इन-ऑर्डर डिलीवरी चाहते हैं तो आपको यूडीपी का उपयोग नहीं करना चाहिए।
कोडरंगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.