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