के लिए चुनने के लिए कौन सा प्रोटोकॉल जावा में एक टर्न-आधारित गेम के लिए मैं एक गेम सर्वर लिख रहा हूं। इन तथ्यों हैं:एक टर्न-आधारित गेम सर्वर
- ताकि ग्राहकों को डेटा भेजने के लिए के हर 8 सेकंड मान लीजिए की जरूरत है खेल की गति, धीमी है, और उस डेटा समय के सबसे अधिक केवल एक छोटा सा वृद्धिशील अद्यतन (कुछ दर्जन बाइट्स), खेल के शामिल होने या उपलब्ध गेम आदि जैसी स्थितियों से अलग
- सर्वर को बड़ी संख्या में खिलाड़ियों का समर्थन करना चाहिए, जो 1000 कहें, जो कुछ सौ गेम
- जब कोई खिलाड़ी बारी करता है , एक ही गेम में अन्य खिलाड़ियों को इस कदम के बारे में अधिसूचित किया जाना चाहिए। खेल में खिलाड़ियों की अधिकतम संख्या के आसपास 10
सबसे पहले है, मैं अपने विकल्प सूची से बाहर रखा गया यूडीपी के रूप में मैं एक विश्वसनीय प्रोटोकॉल की आवश्यकता है क्योंकि दुर्लभ स्थितियों में मैं वास्तव में कुछ डेटा जो एक में फिट नहीं कर सकते भेजने की जरूरत है पैकेट और मैं आने वाले पैकेजों और अन्य निम्न-स्तरीय सामानों के क्रम को ट्रैक करने, पैकेट और इसी तरह की चीजों को विलय करने से परेशान नहीं करना चाहता हूं।
तो दुविधा यह है कि टीसीपी या HTTP का उपयोग करना है या नहीं।
टीसीपी प्रयास # 1
सर्वर (और इसके विपरीत) के लिए ग्राहक से कनेक्शन हर समय खोला जाता है। इस तरह, जब कोई खिलाड़ी आगे बढ़ता है, तो सर्वर आसानी से खेल के अन्य खिलाड़ियों को सूचित कर सकता है। मुख्य बात जो मुझे इस दृष्टिकोण से परेशान करती है वह यह है कि क्या यह सलाह दी जाती है कि हर समय 1000 कनेक्शन और सॉकेट खुल जाएंगे?
टीसीपी प्रयास # 2
विकल्प है जो मैं की है सोचा, एक ग्राहक से हर अनुरोध पर एक अलग कनेक्शन/सॉकेट स्थापित करने के लिए उपयोग करने के लिए। एक ग्राहक एक कनेक्शन खोल देगा, सर्वर पर कुछ छोटा डेटा भेज देगा और उस कनेक्शन को बंद करेगा। इस दृष्टिकोण के साथ, मेरे पास 10 का कहना है कि प्रत्येक थ्रेड में क्लाइंट के अनुरोधों को अलग-अलग करें और किसी भी समय 10 से अधिक कनेक्टिन्स/सॉकेट खोले जाएं।/
- खोलने की महंगाई ग्राहक
- खेल में अन्य खिलाड़ियों के बारे में सूचित करने के रास्ते के लिए कनेक्शन को बंद करने, के बाद से उन्हें कनेक्शन संभवत: बंद कर दिया है: लेकिन वहाँ दो चीजें हैं जो इस दृष्टिकोण के साथ मुझे परेशान कर रहे हैं । उनमें से प्रत्येक को उस मामले में "मतदान" सर्वर में अद्यतन के लिए होना चाहिए, चलो हर एक सेकंड कहें।
टीसीपी सॉकेट/कनेक्शन स्थापित करने की लागत क्या है? क्या यह एक महंगा ऑपरेशन है या यह केवल कुछ एमएस (या कम) में किया जाता है?
HTTP
- अगर मैं एक नया प्राप्त/पोस्ट बस कुछ बाइट्स भेजने के लिए भेजने की जाएगी वहाँ भूमि के ऊपर का एक बहुत होगा?
- क्या मैं 1000 HTTP कनेक्शन ग्राहकों को एक साथ रख सकता हूं और फिर AJAX या ओवरहेड को कम करने के लिए समान चीजों का उपयोग कर सकता हूं?उस मामले में, 1000 निरंतर कनेक्शन के बारे में बैंडविड्थ/प्रदर्शन एक महत्वपूर्ण समस्या पैदा होगा?
मुझे किसी भी प्रकार के सुझाव/सलाह के लिए खोला गया है।
लगभग # 2: कनेक्शन स्थापित होने पर आपको प्लेयर को प्रमाणीकृत करना होगा ... यह भी धीमा हो सकता है !? – opatut
जावा में लिखे गए क्लाइंट और सर्वर दोनों हैं? – Kylotan
कई क्लाइंट हैं, जिनमें से एक जावा में है, लेकिन मैं एक सामान्य समाधान की तलाश में हूं। – eold