2012-04-04 10 views
15

मैं क्लासिक बैटलशिप गेम की मूल रूप से एक मल्टीप्लेयर (दो से अधिक खिलाड़ियों में) की एक छोटी परियोजना शुरू कर रहा हूं।इंटरनेट पर एंड्रॉइड पी 2 पी (सीधा कनेक्शन) (एनएटी के पीछे)

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

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

तो एंड्रॉइड एनएटी के पीछे डिवाइस के बीच विश्वसनीय छेद पंचिंग (अधिमानतः टीसीपी से अधिक) प्राप्त करने के लिए कोई विचार कैसे है? इसे 100% मामलों पर काम करने की ज़रूरत नहीं है (कुछ अजनबी एनएटी समर्थित नहीं हो सकते हैं) लेकिन यह अच्छा होगा अगर यह ज्यादातर मामलों पर काम करता है।

+0

विन माई हेटेट द्वारा प्रस्तुत समाधान में एक अच्छी क्षमता है (यह Google के अपने बुनियादी ढांचे का उपयोग करती है)। हालांकि, मुझे अभी भी एंड्रॉइड पर टीसीपी और/या यूडीपी छेद पंचिंग के लिए एक अच्छे समाधान में दिलचस्पी है। – petersaints

+0

आपने @petersaints के साथ क्या किया? – kishu27

उत्तर

8

gtalk पर smack के माध्यम से xmpp का उपयोग करें। आपको सर्वर और विफलता के एक बिंदु के बारे में चिंता करने की ज़रूरत नहीं है। इसके बारे में चिंता करने दो! मैंने टेट्रिस को एक संचार परत के रूप में gtalk का उपयोग करके दो खिलाड़ी के खिलाफ खेलने के लिए लिखा है। http://code.google.com/p/tetrads-drop-lite/ यदि आप अधिक खिलाड़ी चाहते हैं तो आप एमयूसी को आजमा सकते हैं।

+0

मैंने एक्सएमपीपी का उपयोग करने के बारे में भी सोचा। स्मैक का किस संस्करण का आपने उपयोग किया है? ऐसा लगता है कि मूल परियोजना एंड्रॉइड के लिए नहीं बनाई गई है लेकिन कुछ बंदरगाह हैं। इसके अलावा, क्या एक्सएमपीपी के माध्यम से डेटा भेजना आसान है? आप केवल पाठ भेज सकते हैं या बाइनरी डेटा भेजना संभव है? – petersaints

+0

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

+0

ठीक है, हाँ! यह काम कर सकता है। सुझावों के लिए धन्यवाद। क्या आप बस बता सकते हैं कि आपके द्वारा उपयोग किए गए स्मैक संस्करण को यहां से था (मुझे लगता है कि यह आधिकारिक है): http://www.igniterealtime.org/downloads/index.jsp#smack यदि नहीं, तो आप किस एंड्रॉइड पोर्ट का उपयोग करते थे? मैं बाद में स्वीकार किए गए संदेश को चिह्नित करूंगा। क्योंकि मुझे अभी भी प्रत्यक्ष टीसीपी/यूडीपी कनेक्शन में दिलचस्पी है, लेकिन यह एक अच्छा कामकाज है (और शायद छेद छिद्रण से कम हैकी)। – petersaints

0

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

सबसे अच्छा संभवतः मौजूदा फेडरेटेड मैसेजिंग सिस्टम जैसे जैबर का उपयोग करना संभव है।

0

यूडीपी विश्वसनीय वितरण नहीं है, लेकिन आप इसे यूपीपी पैकेट भेजने की आवश्यकता के द्वारा विश्वसनीय बना सकते हैं, स्वीकृति की आवश्यकता होती है। यह, कुछ अन्य आवश्यकताओं के साथ, आईपी पर टीसीपी विश्वसनीय बनाता है (जो शुरू करने के लिए अविश्वसनीय है)।

एक नोट के रूप में, यह लागू करना संभव है लेकिन शायद समय लेने वाला होगा और लागत/लाभ आपकी स्थिति में काम नहीं कर सकता है।

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