2009-03-11 13 views
15

मैं एक छोटा मल्टीप्लेयर गेम बनाने की योजना बना रहा हूं जिसे जावा ऐपलेट या वेब ब्राउजर में फ्लैश फाइल के रूप में चलाया जा सकता है। मैंने पहले कोई सर्वर प्रोग्रामिंग नहीं किया है, इसलिए मैं सोच रहा हूं कि मुझे किस तरह का सर्वर आर्किटेक्चर होना चाहिए।एक मल्टीप्लेयर गेम के लिए सर्वर आर्किटेक्चर?

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

एक और विकल्प क्लाउड होस्टिंग सिस्टम (एक समर्पित सर्वर के विपरीत) का उपयोग कर सकता है, इसलिए वे खेल बढ़ने के साथ अतिरिक्त मशीनों को जोड़ने का ख्याल रखेंगे। जब तक प्रत्येक सर्वर डेटाबेस को अद्यतन करने के लिए कोर perl/php फ़ाइलों को चलाता है, तो इसे ठीक काम करना चाहिए।

फिर भी एक और विकल्प Google ऐप इंजन का उपयोग कर सकता है।

सर्वर आर्किटेक्चर, ओएस/डेटाबेस पसंद के संबंध में कोई विचार, और सर्वर-साइड प्रोग्रामिंग के लिए perl/php/python स्क्रिप्ट का उपयोग करने की मेरी विधि एक अच्छी है, इसकी सराहना की जाएगी!

+0

क्या आप विस्तारित कर सकते हैं कि यह किस प्रकार का खेल है? इससे हमें आपकी मदद करने में मदद मिलेगी :) – Uri

+0

यह एक छोटा मल्टीप्लेयर आरपीजी गेम होगा, इसलिए वास्तविक समय के आधार पर वास्तविक समय :) –

+0

मुझे लगता है कि आप एक ही मशीन की याद में सभी राज्यों को प्रबंधित करने और नियमित रूप से समर्थन देने से बेहतर हैं यह एक डेटाबेस तक (लेनदेन?)। इस तरह से सभी ग्राहकों को सिंक्रनाइज़ करना बहुत आसान है। – Uri

उत्तर

8

आपको गेम के बारे में और अधिक स्पष्ट करने की आवश्यकता है, और विशिष्ट कार्यान्वयन विवरण के बजाय आर्किटेक्चर के बारे में और सोचने की आवश्यकता है।

मुख्य प्रश्न यह है कि आपका गेम वास्तविक समय, बारी आधारित, या लंबी देरी आधारित (उदा।, ईमेल शतरंज) में होने वाला है या नहीं। एक और सवाल यह है कि क्या आप बाद में रीलोड के लिए राज्य को ठंडा कर रहे हैं या नहीं।

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

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

मैं अपने जीवन के लिए यह नहीं कर सकता कि यह और perl या PHP करने के लिए कोई ठोस कारण है। आपका गेम वेब आधारित नहीं है, इसे वेब उन्मुख भाषा में क्यों लिखें? सर्वर के लिए अच्छे पुराने जे 2 ईई का प्रयोग करें, और एक्सएमएल और AJAX के माध्यम से अपने ग्राहकों के साथ डेटा का आदान-प्रदान करें। यदि संभव हो, तो सर्वलेट्स के बजाए ग्राहकों पर वास्तविक जावा एप्लिकेशन चलाएं। इसके बाद आप जेएमएस का उपयोग करने से लाभ उठा सकते हैं जो आपके लिए बहुत से संचार विवरणों को सारणकर आपकी पीठ से भारी भार लेगा।

+0

का उपयोग करने के लिए एक फ्रेमवर्क देकर अपने स्वयं के मल्टीप्लेयर गेम बनाने के इच्छुक लोगों के लिए एक अच्छा और आसान प्रवेश बिंदु प्रदान करता है। ग्राहक इसे जावा एप्लेट के रूप में चलाएगा। क्या आपका मतलब है कि सर्वर जावा सर्वलेट चलाएगा या सर्वर को एक पूर्ण उड़ा हुआ एप्लिकेशन चलाना चाहिए? यह सिर्फ इतना है कि perl/php सर्वर पर अधिक आम और समर्थित होता है, इसलिए मैंने सोचा कि उनमें सर्वर कोड बनाना बेहतर विचार हो सकता है –

+0

सर्वर एक पूर्ण उड़ा हुआ एप्लिकेशन होना चाहिए। आप स्मृति में ग्राहकों के बीच सिस्टम स्थिति और सिंक्रनाइज़ेशन का प्रबंधन करना चाह सकते हैं। – Uri

+0

यदि आप एक सामान्य वेब सर्वर पर perl/php चलाते हैं, तो आपके पास प्रति ग्राहक एक अलग प्रक्रिया होगी। यदि आप एक बहुप्रचारित सर्वर चलाते हैं जो उच्च-स्तरीय भाषा में एकाधिक अनुरोधों को पूरा कर सकता है, तो चीजें सरल हो सकती हैं। – Uri

6

अपने सर्वर आर्किटेक्चर के लिए, आपको Three Rings' code पर एक नज़र डालें। उन्होंने जावा (क्लाइंट- और सर्वर-साइड दोनों) में कई स्केलेबल गेम लिखे हैं।

+2

+1 के लिए +1 - अपने www.gamegardens.com को भी देखें - यह गेम बनाने और आपको अपने गेम सर्वर – ninesided

0

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

@ सराह अच्छा संकेत, धन्यवाद भी;)

+0

बीटीडब्ल्यू तीन-छल्ले और गेमगार्डेंस लिंक एंटीपी 2 पी अभिभावकों द्वारा अवरुद्ध किए जा रहे हैं, कोई भी जानता है कि वह क्यों है? – tomasb

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

  • कोई संबंधित समस्या नहीं^_^