Node.js के लिए रियलटाइम मल्टी-प्लेयर गेम डिज़ाइन सिद्धांत


12

मैं मल्टी-प्लेयर नेटवर्किंग पर वाल्व लेख पढ़ रहा हूं जिसे याहेन बर्नियर के 2001 के पेपर से क्लाइंट / सर्वर इन-गेम प्रोटोकॉल डिज़ाइन और ऑप्टिमाइज़ेशन में लेटेंसी कम्पेनसेटिंग मेथड्स से अनुकूलित किया गया है । मैं एक वास्तविक समय का मल्टी-प्लेयर गेम बना रहा हूं, जो socket.io के माध्यम से क्लाइंट से जुड़े नोड.जेएस सर्वर का उपयोग कर रहा है और मेरे पास नीचे दिए गए सिद्धांतों के बारे में कुछ प्रश्न हैं:

इकाई इंटरपोल

[इंटरपोलेशन] चिड़चिड़ी गति को रोकता है जिससे यह आमतौर पर सर्वर अद्यतन बफ़र करने के लिए ले जाएगा और फिर उनके बीच के अंतराल को सुचारू रूप से बीच में अंतराल के साथ खेलते हुए। यह पैकेट के नुकसान से होने वाले ग्लिट्स से भी बचा सकता है।

क्लाइंट-साइड भविष्यवाणी

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

लाग मुआवजा

लैग क्षतिपूर्ति सर्वर की धारणा है कि किसी खिलाड़ी की विलंबता का उपयोग करते समय [उपयोगकर्ता इनपुट] को संसाधित करने के लिए, जब कमांड भेजा गया था तो खिलाड़ी ने जो देखा वह देखने के लिए। भविष्यवाणी के संयोजन में, लैग क्षतिपूर्ति नेटवर्क के विलंब को एक हमलावर के दृष्टिकोण से लगभग समाप्त करने के बिंदु तक पहुंचने में मदद कर सकती है।

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

  • क्या मैं UDP और Node.js का उपयोग करके सर्वर और वेब-ब्राउज़र के बीच संवाद कर सकता हूं और इसके विपरीत?

  • चूंकि कागज एक दशक से अधिक पुराना है, क्या ये सिद्धांत अभी भी उपयोग में हैं या अन्य तकनीक दिखाई दी है?

कोई भी सहायताकाफी प्रशंसनीय होगी।


1
आपको लोकप्रिय विश्वास के विपरीत, मल्टीप्लेयर गेम्स के लिए वास्तव में यूडीपी की आवश्यकता नहीं है। उत्तम से सीखो; वाह टीसीपी का उपयोग करता है, और मेरा मानना ​​है कि कई अन्य एएए मल्टीप्लेयर गेम करते हैं। लोग बस किसी की सलाह का पालन करते हैं, और फिर वे अगले 5 महीने खुद टीसीपी के खराब और धीमे संस्करण को लागू करने में खर्च करते हैं!
जकोरा जूल

1
(जब तक, निश्चित रूप से, आप निश्चित हैं कि आपके पास यूडीपी के एक सभ्य प्रोटोकॉल को विकसित करने के लिए ज्ञान और संसाधन हैं जो इसके फायदे का उपयोग कर सकते हैं।)
jcora

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

@Yannbane को पता नहीं था कि वाह टीसीपी का उपयोग करता है। बहुत सारे MMOs की तरह लगता है, जो मुझे मिल सकता है। मुझे HTML5 के साथ मल्टीप्लेयर गेम लिखने के बारे में अधिक आश्वस्त बनाता है। धन्यवाद!
dreta

जवाबों:


6
  • परिवहन प्रोटोकॉल की परवाह किए बिना लैग के प्रभाव को कम करने के सिद्धांत समान हैं। पैकेट नुकसान एक और विषय है - कई प्रकार के पैकेटों को खोने के कारण कुछ भी महत्वपूर्ण नहीं है क्योंकि अगला अपडेट संभवतः पहले से ही है - यहां यूपीडी का लाभ है, लेकिन जब आपको यह सुनिश्चित करना होगा कि एक निश्चित पैकेट दिया जाए, तो आपको कस्टम की आवश्यकता होगी UDP के साथ ऐसा करने के लिए पावती कोड
  • Node.js UDP का समर्थन करता है, लेकिन वेब ब्राउज़र (प्लगिन के बिना) नहीं है। दोनों के बीच संचार के लिए सबसे अच्छा वास्तविक समय तरीका वेब सॉकेट्स है, जो मूल रूप से टीसीपी है। लेकिन संचार के लिए, आप सॉकेट.आईओ का उपयोग करना चाह सकते हैं, जो उन ब्राउज़रों के लिए कमियां प्रदान करता है जो वेब सॉकेट का समर्थन नहीं करते हैं।
  • सिद्धांत वही रहते हैं।

1
मुझे लगता है कि यह पुराना है - WebRTC यूडीपी जैसे संचार का उपयोग करने का तरीका होना चाहिए, है ना?
निकोले टेंसकोव

4

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

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


1

मेरा मानना ​​है कि प्रौद्योगिकी बहुत अधिक समान है। इसके अलावा, अवधारणाएं इस बात पर निर्भर नहीं करती हैं कि आप किस भाषा का उपयोग करते हैं या क्या आप यूडीपी या टीसीपी करते हैं। मैंने यहाँ पूरी बात की बहुत विस्तृत व्याख्या लिखी है http://www.gabrielgambetta.com/fpm1.html , जिसमें सुंदर चित्र शामिल हैं :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.