जावास्क्रिप्ट और वास्तविक समय मल्टीप्लेयर के लिए PHP? [बन्द है]


13

मैं सोच रहा हूं कि क्या जावास्क्रिप्ट क्लाइंटसाइड को PHP / mysql serveride के साथ मिलाना HTML5 रीयल-टाइम मल्टीप्लेयर (छोटे पैमाने) ब्राउज़र गेम के लिए एक अच्छा विचार है?

मेरा तकनीकी ज्ञान बहुत सीमित है, और भले ही मैं भविष्य में नोड.जेएस सीखने की योजना बना रहा हूं, लेकिन सीखने की अवस्था अभी बहुत बड़ी है।

चूंकि मैं पहले से ही PHP से परिचित हूं इसलिए मुझे लगता है कि मैं इसे बहुत तेज़ी से काम करूंगा।

जिस पैमाने पर मैं सोच रहा हूं, उस समय 2-8 खिलाड़ी हैं। और क्लाइंट को सर्वर मैसेज काउंट को यथासंभव कम रखने की कोशिश कर रहा है।

जिन मूल्यों को मैं संग्रहीत / संभालना चाहता हूं वे हैं:

  • खिलाड़ी का नाम और आई.डी.
  • X और Y स्थिति।
  • स्वास्थ्य।
  • लैस आइटम (अधिकतम 8 स्लॉट, शायद कम)।
  • क्रियाएँ (चलना, हमला, उपयोग आदि लेकिन एक समय में केवल 1 क्रिया / खिलाड़ी)।
  • बुलेट एक्स, वाई निर्देशांक और प्रक्षेपवक्र।
  • गिल्ड / कबीले का नाम।
  • और कुछ बुनियादी चैट / मेलिंग फ़ंक्शन।

मेरा अनुमान भले ही यह सबसे अच्छा समाधान नहीं है, लेकिन जब तक मैं तर्क को छोटा रखूंगा, यह पूरी तरह से संभव है। क्या मैं सही हू?


4
पूरी तरह से उचित लगता है। आप इसे क्यों नहीं आजमाते? सबसे खराब स्थिति, आप कुछ समय सीखने में बिताते हैं, सबसे अच्छा मामला, आपको वही मिलता है जो आप चाहते हैं।
विलियम मारीगर

1
हाँ, लेकिन मुझे लगता है कि यह बनाने में कुछ समय लगेगा, और मुझे समय बर्बाद करना पसंद नहीं है, इसीलिए मैंने यहाँ पूछा। =)
justanotherhobbyist

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

1
Thats वास्तव में एक अच्छा बिंदु है
justanotherhobbyist

जवाबों:


12

एक वास्तविक समय के खेल के लिए, आप विलंबता को कम करना चाहते हैं। PHP और नोड के बारे में नोट्स के साथ, इसे प्राप्त करने के लिए दो सुझाव दिए गए हैं:

  1. WebSockets का उपयोग करें। वे सर्वर और क्लाइंट के बीच तेजी से दो-तरफ़ा संचार की अनुमति देते हैं। यहां नोड.जे का उपयोग करने से यह फायदा होता है कि आप पाइप के दोनों सिरों पर एक ही जावास्क्रिप्ट एपीआई का उपयोग कर सकते हैं। नोड.जेएस के लिए अद्भुत सॉकेट.आईओ मॉड्यूल भी है जो वेब ब्राउज़र को समर्थन नहीं करने वाले कम ब्राउज़रों को फालबैक तकनीक प्रदान करता है। यदि आप वास्तव में करना चाहते हैं, तो थोड़ी सी गुगली करके, ऐसा लगता है कि आप PHP से WebSockets का भी उपयोग कर सकते हैं।
  2. समय पर महत्वपूर्ण डेटा में डेटाबेस को शामिल न करें जैसे कि तेजी से चलती वस्तुओं के निर्देशांक। इसका मतलब है कि उन्हें स्मृति में रखना, जो कि पारंपरिक PHP उपयोग मॉडल के लिए विशेष रूप से अनुकूल नहीं है, ताकि यह प्रत्येक अपाचे (या जो भी वेब सर्वर) के लिए अनुरोध के लिए एक बार आग लग जाए, लेकिन आप अपने PHP सर्वर ऐप को स्टैंडअलोन के रूप में भी लॉन्च कर सकते हैं। मुझे लगता है कि नोड, अपने V8 कोर के साथ, हालांकि PHP की तुलना में तेज़ होने वाला है । चाहे वह मुद्दा यह हो कि आपके गेम की मांग कितनी है और सर्वर कितना शक्तिशाली है।

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


बिंदु 2 के लिए +1। इसके साथ आप जो सबसे बड़ी गलती कर सकते हैं, वह उम्मीद कर रहा है कि प्रत्येक घटना पर MySQL प्रश्नों की आग लग जाएगी। HDD से गेम डेटा को स्थानांतरित करने के लिए आप जो कुछ भी कर सकते हैं वह मदद करने वाला है। मुझे इसके लिए Memcached abuse के साथ सफलता मिली है। निस्संदेह अन्य तरीके हैं।
DampeS8N

हाँ, मैं वास्तव में नोड सीखना चाहता हूं, लेकिन मुझे अभी तक इसे cmd से भी शुरू करना है, डेवलपर्स द्वारा की गई सबसे बड़ी गलती यह थी कि इसमें प्रवेश करना इतना मुश्किल था। कम से कम अब विंडोज़ संस्करण एक इंस्टॉलर के साथ आता है, अगर मैं एक अच्छा ट्यूटोरियल ढूंढता हूं तो यह कोशिश कर सकता है।
Justanotherhobbyist

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

1

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

बेशक, सर्वर और क्लाइंट दोनों को खेल का सटीक समान कार्यान्वयन करने की आवश्यकता होगी ताकि यह थोड़ा और काम हो सके। यदि आपके पास क्लाइंट और सर्वर दोनों पर सही कार्यान्वयन है, तो क्लाइंट को कम बार सिंक करने की आवश्यकता होगी।

यह क्लाइंट / सर्वर मैसेजिंग को कम करेगा और यह विलंबता को कम करेगा। इससे धोखाधड़ी रोकने में भी मदद मिलेगी।

मान लें कि आप इस गेम को जावास्क्रिप्ट में बना रहे हैं, तो NodeJS का उपयोग करके जावास्क्रिप्ट में बैक-एंड लिखना भी सार्थक हो सकता है। इस तरह आप सर्वर और क्लाइंट दोनों के लिए अपने गेम के जावास्क्रिप्ट कार्यान्वयन का पुन: उपयोग कर सकते हैं।


0

मैं Nodejs सीखने की सलाह देता हूं। यदि आप पहले से ही अब जावास्क्रिप्ट, यह इतना मुश्किल नहीं होगा। मैंने Nodejs के साथ जल्दी से एक TRON मल्टीप्लेयर गेम बनाया, और यह मेरा पहला दिन था। (ओह, और क्लाइंट एक HTML5 कैनवास था; मैं केवल मुख्य इनपुट भेज रहा था, जैसा कि अन्य टिप्पणियों में उल्लेख किया गया है।)

Nowjs नामक एक मॉड्यूल पर एक नज़र डालें। सौभाग्य!

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