NAT के पीछे एक मल्टीप्लेयर गेम कार्य मज़बूती से कैसे करें?


20

यहां तक ​​कि ऐसे खेल जो 100% क्लाइंट / सर्वर कभी-कभी समस्या होते हैं जब क्लाइंट NAT के पीछे होता है। पी-पीयर गेम्स और भी बड़े मुद्दे हैं। कुछ खेलों में कई ट्रांसपोर्ट (जैसे यूडीपी और टीसीपी) या कई कनेक्शन (जैसे आवाज के लिए एक अलग यूडीपी पोर्ट) का उपयोग करने की आवश्यकता होती है।

यह सुनिश्चित करने के लिए कि एनएटी राउटर के पीछे दौड़ने से खेल के मज़बूती से काम करने के कुछ तरीके क्या हैं?

  • पीयर-पीयर: कोई केंद्रीयकृत सर्वर मौजूद नहीं है। प्लेयर ए गेम शुरू करता है और प्लेयर बी इसमें शामिल होना चाहता है
  • क्लाइंट-सर्वर: एक अच्छी तरह से ज्ञात पते (होस्टनाम) पर एक केंद्रीकृत सर्वर सभी आने वाले कनेक्शनों को स्वीकार करता है। प्रत्येक क्लाइंट केवल उस सर्वर के साथ संचार करता है।
  • कॉम्बो: जहां सर्वर सिर्फ मैचमेकिंग है, लेकिन गेम अपडेट सहकर्मी हैं। अलग-अलग साथी प्रत्येक खिलाड़ी को अलग-अलग आईपी / पोर्ट संभावित रूप से देख सकते हैं (उदाहरण के लिए कुछ ग्राहक एक ही NAT के पीछे हैं और कुछ एक अलग राउटर पर हैं)

जवाबों:


9

जिस तकनीक का सबसे अधिक इस्तेमाल किया जाता है, उसे NAT पंच-थ्रू कहा जाता है। यहाँ एक अच्छा परिचय है: http://www.mindcontrol.org/~hplus/nat-punch.html

कम से कम UDP के लिए OSS प्रोजेक्ट है: http://udt.sourceforge.net/index.html

RakNet पंच-थ्रू का समर्थन करता है, मुझे भी विश्वास है। यह वाणिज्यिक है, लेकिन इसके पास एक "इंडी" लाइसेंस है। यहां देखें: http://www.jenkinssoftware.com/

"NAT पंच" के लिए Googling से आपको बहुत अधिक पढ़ने की सामग्री मिलेगी


1
मुझे पता है कि यह वास्तव में पुराना सवाल और जवाब है, लेकिन अगर कोई इसे पढ़ता है, तो RakNet OculusVR द्वारा अधिग्रहित है और अब 2-खंड बीएसडी लाइसेंस के साथ खुला-स्रोत है। github.com/OculusVR/RakNet
Quad

9
  • ग्राहक को सर्वर या अपने पते के सहकर्मी को सूचित न करें। दूसरे शब्दों में, ग्राहक A के IP को गेम पैकेट में एम्बेड न करें और उस पते पर क्लाइंट B या सर्वर रिप्लाई करें। हमेशा उस पते / पोर्ट का जवाब दें जो संदेश से उत्पन्न हुआ है।

  • खेल के लिए उपयोग किए जाने वाले अलग-अलग यूडीपी या टीसीपी पोर्ट को छोटा करें। इससे NAT नियम आसान हो जाते हैं।

  • उपयोगकर्ता को गेम में उपयोग किए जाने वाले डिफ़ॉल्ट पोर्ट को ओवरराइड करने की अनुमति दें। इस तरह से कई सर्वरों को एक ही NAT के पीछे होस्ट किया जा सकता है।

  • बंदरगाहों और किसी भी नियम का पालन करें जो वे आपके खेल प्रलेखन (उस एक ज़ोरबा के लिए धन्यवाद) का पालन करते हैं। डिसेंट 3 में मैं एक अकेले अकेले टेस्ट एप्लिकेशन का निर्माण करने के लिए गया था, जो आपको टेस्ट सर्वर पर पैकेट भेजकर आपके राउटर या NAT कॉन्फ़िगरेशन का निवारण करने में मदद करेगा।

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

UDP के साथ, आप वास्तव में नहीं जानते कि संदेश कहाँ से उत्पन्न हुआ है। रिटर्न एड्रेस में कुछ भी लिखा जा सकता है।
मिकेल

0

अन्य उत्तरों के साथ, एक मौजूदा पहिये का उपयोग करें: http://miniupnp.free.fr/ यह लाइब्रेरी फ़ंक्शन रूप में लगभग सभी परेशानियों से लड़ती है, जो आपको पंच और खींचने के लिए कब और कैसे नियंत्रित करती है :)

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