2009-07-22 15 views
6

मैं एक नेटवर्क गेम (1v1) बना रहा हूं जहां गेम में इसकी पी 2 पी - गेम सर्वर की आवश्यकता नहीं है।पी 2 पी नेटवर्क गेम/ऐप्स: "battle.net" के समान विकल्प मिलान करने वाले सर्वर

हालांकि, खिलाड़ियों के लिए एक दूसरे माध्यम में समन्वय करने की आवश्यकता के बिना "एक दूसरे को खोजने" करने में सक्षम होने के लिए और आईपी पते दर्ज करें (नेटवर्क गेम के मॉडेम दिनों के समान), मुझे समन्वय/मिलान सर्वर होना चाहिए ।

मैं नियमित रूप से वेब होस्टिंग उपयोग नहीं कर सकते क्योंकि:

  • ग्राहकों यूडीपी में सूचित कर देंगे।
  • इसलिए मैं नेट के माध्यम से जाने के लिए सक्षम होना यूडीपी होल पंचिंग करने की आवश्यकता होगी
  • कि सर्वर यूडीपी में बात करते हैं और ग्राहक के आईपी और नियमित रूप से वेब के साथ पोर्ट
  • afaik होस्टिंग पता करने के लिए की आवश्यकता होगी (php/आदि) मैं केवल ग्राहक का आईपी पता प्राप्त कर सकता हूं और केवल टीसीपी (HTTP) में संवाद कर सकता हूं।

विकल्प मैं वर्तमान पर विचार कर रहा हूँ:

  • उपयोग एक होस्टिंग समाधान जहाँ मेरे कार्यक्रम UDP कनेक्शन स्वीकार कर सकते हैं। (कोई सुझाव?)

  • UDPonNAT यह करने के लिए लगता है, लेकिन GTalk उपयोग करता है और प्रत्येक ग्राहक की आवश्यकता है इस के लिए एक GTalk खाता

कोई भी विचार (जो शायद यह एक अनुपयुक्त समाधान बनाता है) के लिए? धन्यवाद :)

उत्तर

3

सबसे पहले, मुझे यह कहना है कि यह विशेषज्ञता के अपने क्षेत्र से बाहर है, लेकिन मुझे खुद को बहुत दिलचस्पी मिली, इसलिए मैं कुछ खोज और पढ़ रहा हूं।

ऐसा लगता है कि यूडीपी एनएटी ट्रैवर्सल के लिए सबसे अधिक निर्धारित समाधान STUN सर्वर का उपयोग करना है। मैंने कुछ त्वरित खोजों को देखने के लिए किया है कि क्या ऐसी कोई कंपनियां हैं जो आपको सीधे स्टॉप होस्टिंग समाधान प्रदान करती हैं, लेकिन यदि कोई भी हो, तो उन्हें सरल वेब होस्टिंग के विज्ञापनों के ढेर में दफनाया गया।

सौभाग्य से, ऐसा लगता है कि कई STUN सर्वर हैं जो पहले से ही चल रहे हैं और चल रहे हैं और सार्वजनिक उपयोग के लिए स्वतंत्र हैं। voip-info.org पर सार्वजनिक स्टन सर्वर की एक सूची है।

इसके अतिरिक्त, यदि आप SO questions tagged "nat" का पता लगाते हैं तो वहां बहुत अधिक जानकारी होती है।

+0

@ जोएल विटेलमैन: मैं इसे आजमाने जा रहा हूं। अगर यह काम करता है तो मैं आपको बता दूंगा! धन्यवाद :) – yairchu

3

मुझे आपके कोड को चलाने वाले समर्पित सर्वर की तुलना में कोई अन्य विकल्प नहीं दिख रहा है। आपके द्वारा प्रस्तावित अन्य समाधान हैं, क्या हम इष्टतम से कम कहेंगे।

यदि आप छोटे से शुरू करते हैं, तो वर्चुअल होस्टिंग ठीक होगा। लागत बहुत कम हैं।

+0

अन्य विकल्प भी हैं, लेकिन उनमें से सभी इसके लायक से अधिक काम कर रहे हैं। जब नेटकोड की बात आती है, तो चीजों को सरल रखना सबसे अच्छा होता है। – Sneakyness

2

एक पूर्ण उड़ा हुआ समर्पित सर्वर की बजाय, आप केवल एक सस्ती साझा होस्टिंग सेवा प्राप्त कर सकते हैं और एक PHP पृष्ठ के साथ एप्लिकेशन इंटरफ़ेस प्राप्त कर सकते हैं, जो बदले में एक MySQL डेटाबेस बैकएंड के साथ इंटरफेस करता है।

उदाहरण के लिए, Lunarpages में $ 3/माह स्टार्टर पैकेज है जिसमें 5 जीबी स्पेस और 50 जीबी बैंडविड्थ शामिल है। कुछ आसान के लिए, आपको बस इतना ही चाहिए।

फिर आपके पास गेम की सूची के लिए आपका एप्लिकेशन वेब पेज है, और सूची में अपना गेम जोड़ने के लिए एक POST अनुरोध सबमिट करें।

बेशक, इस विधि को PHP और MySQL सीखने की आवश्यकता है यदि आप उन्हें पहले से ही नहीं जानते हैं। और यदि आप इसे सही करते हैं, तो आप PHP पृष्ठ को कनेक्शन को खोलने के लिए एक प्रकार का अनंत लूप दर्ज कर सकते हैं और प्रत्येक कुछ सेकंड में पृष्ठ को मतदान करने और बैंडविड्थ को बर्बाद करने के बजाए केवल ग्राहक को अपडेट खिला सकते हैं। यद्यपि इस उत्तर के दायरे से बाहर है।

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

संपादित करें: टी 35 यह भी कहता है कि "मुफ्त होस्टिंग 1 डोमेन को होस्ट करने की अनुमति देता है, जबकि भुगतान असीमित डोमेन होस्टिंग प्रदान करता है।" तो आप एक डोमेन नाम के लिए भी भुगतान कर सकते हैं और उन्हें लिंक कर सकते हैं! मुझे लगता है कि अल्प अवधि में, यह आपकी सबसे अच्छी (सबसे सस्ता) शर्त है। बेशक, यह सब यह मानने के लिए आप या तो पीएचपी सीखने के इच्छुक हैं या सोच रहे हैं। :)

+0

@Ricket: सुझाव के लिए धन्यवाद।अब मुझे पता चला है कि PHP होस्टिंग मेरे लिए काम नहीं करेगा क्योंकि afaik यह मुझे यूडीपी – yairchu

+1

राइट में ग्राहकों के साथ संवाद करने की अनुमति नहीं देगा। मैं अभी वापस गया और एनएटी ट्रैवर्सल की अवधारणा को फिर से समझ लिया, और फिर एहसास हुआ कि हाँ आपको यूडीपी क्षमताओं की आवश्यकता होगी। हालांकि, खेलों की सूची और इस तरह की बातचीत के लिए, आपको टीसीपी का उपयोग करना चाहिए। क्लाइंट के आउटगोइंग बंदरगाहों को निर्धारित करने के लिए आपको केवल यूडीपी पैकेट प्राप्त करने के लिए सर्वर की आवश्यकता है, और फिर आप उन्हें दूसरे के आउटगोइंग यूडीपी पोर्ट को बताते हुए टीसीपी पर एक संदेश भेज सकते हैं। लेकिन उम्मीद है कि आप यह सब पहले ही जानते हैं। यदि आपको रीफ्रेशर की आवश्यकता है, तो सुरक्षा अब पॉडकास्ट एक शानदार संसाधन है: http://www.grc.com/securitynow.htm#42 – Ricket

+0

और केवल एफवाईआई, PHP तकनीकी रूप से सॉकेट ट्रांसमिशन करने में सक्षम है; लेकिन यह इस मामले में उपयोगी नहीं होगा, क्योंकि PHP की प्रकृति और इसकी 30-सेकंड निष्पादन सीमा। आप शायद Google ऐप इंजन पर विचार कर सकते हैं? मुझे लगता है कि पाइथन इसे लिखने के लिए एक अच्छी भाषा होगी, हालांकि मैं इसे सामान्य रूप से तुच्छ जानता हूं। – Ricket

0

अपने समर्पित सर्वर और सख्ती से पी 2 पी नेटवर्किंग वातावरण की मेजबानी के बीच एक मध्यवर्ती समाधान gnutella मॉडल है। उस मॉडल में, सुपरपीयर हैं जो स्थानीय सर्वरों की तरह कार्य करते हैं, जिन्हें आईपी पते ज्ञात होते हैं और एक विशिष्ट सहकर्मी की तुलना में अधिक ग्राहकों (और इस प्रकार ज्ञान) से जुड़े होते हैं। यह अभी भी आपको कम से कम एक सुपरपीयर चलाने की आवश्यकता है, लेकिन यह आपको अन्य लोगों को अपने स्वयं के सुपरपीयर चलाने का विकल्प देता है।

+0

@Eric: मुझे लगता है कि gnutella में सर्वर बहुत अधिक काम कर रहा है (साझा फ़ाइलें आदि) और मेरी समस्या के लिए यह मॉडल अधिक हो सकता है। – yairchu

+0

आप सही हैं कि यह बहुत अधिक काम कर रहा है। मैं केवल उस मॉडल का सुझाव दे रहा था जहां पी 2 पी क्लाइंट एक नेटवर्क बनाते हैं जहां वे सीधे उन लोगों की तुलना में अधिक सहकर्मियों से अवगत हैं जिन्हें वे सीधे जुड़े हुए हैं। यह gnutella मॉडल है। – Eric

1

ऐसा कुछ भी नहीं है जो हर नेट कनेक्शन का समर्थन करेगा। स्टन शायद अच्छा है, यूपीएनपी इसके लिए काम कर सकता है।

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

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

यदि आप वास्तव में यूडीपी के लिए प्रतिबद्ध हैं, तो आप इसे HTTP पर सुरंग करने पर भी विचार कर सकते हैं।

1

आप कैसे समस्या को दो हिस्सों में तोड़ते हैं - एक गेम मैचर क्लाइंट (जो गेम से अलग है) बनाएं, जो आपके सस्ता/साझा वेबहोस्ट पर http के माध्यम से संवाद कर सकता है। सभी गेमर्स जो गेम मिलान करने वाले फ़ंक्शन का उपयोग करना चाहते हैं, इसका उपयोग करते हैं। यह गेम मैचर क्लाइंट तब आपके सर्वर से जानकारी प्राप्त करने के बाद सही पैरामीटर (आईपी, इत्यादि) के साथ वास्तविक गेम लॉन्च करता है।

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

इस तरह, आपकी समस्याएं कम हो जाती हैं।

संबंधित मुद्दे