2010-05-30 14 views
6

मैं अपने ब्राउज़र-आधारित फ़्लैश-मुक्त जावास्क्रिप्ट संचालित रीयल-टाइम टर्न-आधारित गेम के लिए AMQP (RabbitMQ) बनाम XMPP (eJabberd) के बीच चयन कर रहा हूं। मुझे एएमक्यूपी और एक्सएमपीपी प्रोटोकॉल के बारे में ज्यादा जानकारी नहीं है। मैं उपयोगकर्ता-प्रमाणीकरण के लिए PHP का उपयोग करना चाहता हूं और कुछ डेटा स्टोर-MySQL के साथ पुनर्प्राप्त करना चाहता हूं। जहां तक ​​मुझे पता चला, RabbitMQ में PHP क्लाइंट हैं लेकिन eJabberd नहीं है।रीयल-टाइम ब्राउज़र-आधारित गेम के लिए मुझे कौन सा एएमक्यूपी या एक्सएमपीपी चुनना चाहिए?

मुझे क्या समझा गया है जावास्क्रिप्ट क्लाइंट PHP स्क्रिप्ट को कॉल करता है और आवश्यक प्रसंस्करण में हेरफेर करता है और फिर प्रतिद्वंद्वी प्लेयर को डेटा पास करने के लिए एएमक्यूपी या एक्सएमपीपी सर्वर को पास करता है। Wrox से जेएस और jQuery के साथ प्रो एक्सएमपीपी प्रोग्रामिंग एक अच्छी किताब है लेकिन PHP के साथ कोई उदाहरण नहीं है। तो मेरे प्रश्न निम्नलिखित हैं।

1) मेरे प्रोटोकॉल के लिए कौन सा प्रोटोकॉल उपयुक्त है?

2) क्या मैं सिर्फ PHP क्लाइंट समर्थन के लिए RabbitMQ चुन सकता हूं?

+0

एक्सएएमपीपी/एलएएमपी/आदि क्लाइंट-साइड जावास्क्रिप्ट के साथ कुछ लेना देना नहीं है। अपाचे और अन्य सर्वर जो आप खोज रहे हैं। –

+2

@ कोरोनैटस! आपकी टिप्पणी के लिए धन्यवाद लेकिन मुझे यकीन है कि आपने जो मतलब बताया है उसे अनदेखा कर दिया है। एक्स्टेंसिबल मेसेजिंग एंड प्रेसेन्स प्रोटोकॉल (एक्सएमपीपी) मैं किस बारे में बात कर रहा हूं। – Devyn

+0

क्षमा करें, मैंने "XAMPP" के लिए "XMPP" गलत समझा। मेरी टिप्पणी को अनदेखा करें :) –

उत्तर

9

मैं काफी अच्छा सफलता जावास्क्रिप्ट में एक XMPP ग्राहक को लागू करने के लिए HTTP बाइंड XMPP बकवास करने के लिए दृष्टिकोण का उपयोग करके किया है। मुझे एएमक्यूपी के बारे में पता नहीं है, लेकिन क्लाइंट-साइड एक्सेस के लिए, मुझे एक्सएमपीपी पसंद है। कुछ शब्द क्यों।

ejabberd में पहले से ही बॉश समर्थन शामिल है, और जावास्क्रिप्ट (और संभवतः फ्लैश) के साथ उपयोग करने के लिए आपको बस अपने सर्वर को पोर्ट पर अनुरोधों को पुनर्निर्देशित करने की आवश्यकता है जिस पर आप HTTP अनुरोधों को सुनने के लिए ejabberd को कॉन्फ़िगर करते हैं। (और यहां तक ​​कि यह केवल इसलिए क्योंकि आज के ब्राउज़र में जावास्क्रिप्ट सुरक्षा मॉडल विभिन्न डोमेन और यहां तक ​​कि विभिन्न बंदरगाहों के लिए जावास्क्रिप्ट अनुरोधों को प्रतिबंधित करता है।)

चूंकि एक्सएमपीपी काफी छोटे छोटे एक्सएमएल दस्तावेजों का समूह है, इसलिए इसे किसी भी में एन्कोड करना काफी आसान होना चाहिए आप जो भाषा चुनते हैं।

चूंकि यह व्यापक रूप से समर्थित है, इसलिए आप अपने उपयोगकर्ताओं को अपनी सेवा के साथ पंजीकरण करने की आवश्यकता से बचने में सक्षम हो सकते हैं, जिसे वे निश्चित रूप से सराहना करेंगे।

एक्सएमपीपी लागू करने का मतलब है कि आप अपने गेम में त्वरित रूप से जेबबर नेटवर्क (Google टॉक सहित) के साथ फेडरेशनिंग के साथ त्वरित संदेश समर्थन जोड़ सकते हैं।

चूंकि मुझे एएमक्यूपी के बारे में कुछ नहीं पता है, इसलिए मैं उनकी तुलना नहीं कर सकता - लेकिन मैं कह सकता हूं कि मैं हमेशा अपनी भविष्य की मल्टीप्लेयर परियोजनाओं के लिए एक्सएमपीपी क्यों मानता हूं।


मेरे ejabberd को चुनने के लिए व्यक्तिगत वजह साफ है - यह सुपर आसान स्थापित करने और डेबियन पर कॉन्फ़िगर करने के लिए है। मैं लगभग Erlang और जावा से पूरी तरह से अपरिचित हूँ; हालांकि, मैं समझता हूं कि एर्लांग के बारे में यह है कि यह स्केलेबिलिटी को हासिल करने में आसान बनाता है, और ejabberd लोग कहते हैं कि उन्होंने इसे हासिल किया है।

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

जैसा ऊपर बताया गया है, आपको निश्चित रूप से कुछ प्रकार के प्रॉक्सीइंग करना होगा (mod_rewrite या PHP या किसी अन्य तरीके से) क्योंकि एक्सएमपीपी सर्वर "मुख्य" वेब सर्वर और जावास्क्रिप्ट से अलग पोर्ट पर सुनेंगे क्रॉस-डोमेन सुरक्षा मॉडल XMLHTTPRequest को एक अलग पोर्ट पर करने की अनुमति नहीं देता है।

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

वैकल्पिक रूप से, मैंने XMPP components and ejabberd modules का उल्लेख करने वाले उत्तर पर ठोकर खाई। यह भी मेरे लिए एक दिलचस्प पढ़ा जाएगा।

गुड लक, और इसके पूर्ण होने पर खेल के नाम के साथ एक टिप्पणी छोड़ने के लिए सुनिश्चित हो - मैं :-)


मैं सिर्फ किसी और देखा एक very similar question तैनात यह देखने के लिए अच्छा लगेगा तुम्हारे लिए। इसके उत्तरों में आपके लिए कुछ और दिलचस्प जानकारी शामिल है।


फ्लैश के साथ XMPP का उपयोग कर पर:

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

मुझे ज्यादातर पता लगाया गया है कि वेब-आधारित क्लाइंट जेडब्ल्यूएचएटी और ईजबर्ड (बीओएसएच पर जानकारी के लिए), और फिर क्रॉस-प्लेटफार्म क्लाइंट Psi और ejabberd (प्रोटोकॉल पर जानकारी के लिए) के बीच संचार देखकर कनेक्शन कैसे स्थापित किया जाए। जेडब्ल्यूचैट और वेबकिट के वेब इंस्पेक्टर या फ़ायरफ़ॉक्स के लिए फायरबग के साथ, कोई आसानी से सर्वर के लिए XMLHttpRequests को ट्रैक कर सकता है। एसएसआई के साथ, कोई एक्सएमएल कंसोल चालू कर सकता है और संचार लॉग पढ़ सकता है। अपनी पसंद की भाषा में क्लाइंट को प्रोटोटाइप करने के साथ संयुक्त, बीओएसएच और एक्सएमपीपी का अध्ययन करना बहुत आसान हो गया।

इसके अलावा, XEP के बाद उपयोगी हैं: XEP-0124, XEP-0206

ओ रेली पुस्तक है कि मैं अभी पढ़ रहा हूँ, "XMPP: The Definitive Guide" (पी सेंट आंद्रे, केविन स्मिथ, Remko Tronçon; बहुत सस्ता on Apple's App Store) भी आप महसूस "क्यों चीजें जिस तरह से वे कर रहे हैं किया जाता है" देता है, और कई छोटी चीजें और एक्सएमपीपी के विभिन्न अनुप्रयोगों को दस्तावेज करता है।

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

+0

हाय, आपके उत्तर के लिए धन्यवाद। चूंकि मुझे एरलांग नहीं पता है, मुझे डर है कि मॉड्यूल के साथ गेम के लिए सर्वर नियम लिखते समय मुझे समस्या होगी। क्या जावा आधारित ओपनफायर पर आपको एज्जबर्ड चुनने का कोई कारण है? मुझे जावा में बहुत कम ज्ञान है इसलिए दोनों भाषाएं मुझसे परिचित नहीं हैं। – Devyn

+0

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

+0

मैं अधिक जानकारी प्रदान करने के लिए उत्तर को फिर से संपादित करूंगा। यह इस छोटी टिप्पणी बॉक्स में फिट नहीं लग रहा है :) –

1

AMQP अभी तक संस्करण 1.0 तक नहीं पहुंच पाया है और इसके आसपास कुछ संभावित डिज़ाइन समस्याएं हैं। PHP के लिए एक्सएमपीपी क्लाइंट हैं इसलिए यदि मैं आप थे तो मैं इसे पहले कोशिश करता हूं।

+0

क्या आप XMPP के लिए कुछ उपलब्ध PHP क्लाइंट को इंगित कर सकते हैं? – Devyn

+0

http://xmpp.org/software/libraries.shtml#php –

1

जैसा कि किसी ने उल्लेख किया है, आपको क्लाइंट-टू-सर्वर भाग पर विचार करने की आवश्यकता है; यह अधिक महत्व की प्रतीत होता है।

ऐसा लगता है कि इस विषय पर आपके पास पहले से ही सबसे अच्छी किताब है (जैक मोफिट की एक्सएमपीपी + जेएस बुक) और मैं निश्चित रूप से कहूंगा कि यह तकनीक है।

इसके अलावा आपको उपयोगकर्ता के प्रमाणीकरण, एन्क्रिप्शन और उसके ऊपर के सभी एक्सएमपीपी प्रोटोकॉल एक्सटेंशन भी मिलेंगे, जैसा कि पुस्तक का वर्णन होगा।

भले ही मैं किसी भी PHP-XMPP क्लाइंट की अनुशंसा नहीं कर सकता, मुझे नहीं लगता कि आपके पास एएमक्यूपी के साथ बॉक्स के बाहर के समान स्तर की आवश्यकता होगी।

इसके अलावा, यदि आप अन्य भाषाओं में जानते हैं, और गेम तर्क की मात्रा के आधार पर, तो आप एक एक्सएमपीपी सर्वर घटक लिख सकते हैं। जानकारी के लिए XMPP + जुआ खेलने के बारे में इस से पहले प्रश्न देखें:
XMPP C# Interaction

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