2013-04-28 8 views
5

हम ऑनलाइन मल्टीप्लेयर खेल लिख रहे हैं फ्लैश इच्छा नेट सर्वर साइड में, हम द्वैध चैनल की जरूरत है ताकि संचार सॉकेट का उपयोग किया जाता है।सर्वर - सी #, ग्राहक - फ्लैश, डेटा विनिमय प्रोटोकॉल

क्या आप मुझे सर्वर और क्लाइंट के बीच डेटा का आदान-प्रदान करने के प्रोटोकॉल/प्रारूप के बारे में कुछ सर्वोत्तम अभ्यास बता सकते हैं? आईएमओ अच्छा choise में से एक JSON serialization का उपयोग कर सकता है।

उत्तर

3

यह निर्भर करता है के लिए कार्रवाई करने के लिए। थोड़ी देर के लिए शामिल प्रौद्योगिकियों को भूल जाओ और अपनी विशिष्ट कॉम जरूरतों पर ध्यान केंद्रित करें। आशा है कि अगर आप कुछ संबंधित बिंदुओं का पता लगाते हैं तो आपको कोई फर्क नहीं पड़ता।

  • पॉइंट-टु-बिंदु (पी 2 पी) प्रवाह: - द्वैध, के रूप में आप का उल्लेख हम इस एक पता है।
  • पी 2 पी मोड: आधा- या पूर्ण-डुप्लेक्स? क्या डेटा एक साथ आदान-प्रदान किया जाएगा, या यह हमेशा एक संदेश-प्रतिक्रिया तंत्र है?
  • राज्य: आपके पास एक कोड हो सकता है जो प्रतिक्रिया के लिए इंतजार करेगा, भले ही आपके एक्सचेंज का प्रमुख हिस्सा असीमित है। एक्सचेंज बिल्कुल async है? सिंक? मिश्रित? यह बिंदु पिछले एक से कसकर संबंधित है।
  • ट्रांसमिशन: डेटा विस्फोट, या निरंतर धाराएं?
  • बैंडविड्थ: आप कितने बाइट्स/सेक के आसपास यातायात की अपेक्षा करते हैं? क्या यह आपके लक्षित नेटवर्क का एक बड़ा प्रतिशत है (वायरलेस? मोबाइल? हाय-स्पीड?)
  • विश्वसनीय/अविश्वसनीय सामग्री: क्या डेटा पैकेज का नुकसान आपके ग्राहक स्थिति को अव्यवस्था में फेंक देता है?

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

पूर्ण-डुप्लेक्स का मतलब है कि आप अपने नेटवर्क/दुभाषिया परत पर अधिक डेटा व्यवस्थित कर रहे हैं, और शायद इसे असीमित संचार को संभालना होगा।

यदि प्रदर्शन एक चिंता है, और आपके विनिर्देशों के आधार पर, तो @Viacheslav द्वारा किए गए प्रस्ताव जैसे आकर्षक हो सकते हैं। रखरखाव और पोर्टेबिलिटी की लागत पर एक कस्टम प्रोटोकॉल को अत्यधिक अनुकूलित किया जा सकता है (कई भाषाओं में अपना स्वयं का JSON दुभाषिया होता है, जबकि कस्टम दुभाषियों को लागू करने या encapsuled करने की आवश्यकता हो सकती है, प्रक्रिया में परत जोड़ना और इस प्रकार प्रदर्शन को कम करना, या कोड रूपांतरण की आवश्यकता है।)

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

टीएल; डीआर संस्करण: मैं जेएसओएन जैसे मानक निम्न-स्तरीय प्रोटोकॉल तक चिपके रहूंगा, भले ही वे कुछ ओवरहेड जोड़ दें।

3

मुझे लगता है कि जेएसओएन सबसे अच्छा विकल्प हो सकता है और मुझे बताएं कि क्यों।

सबसे पहले, JSON-serialized गेम यातायात ligth भारित है, क्योंकि JSON नोटेशन "नाम: वैल" जैसा है, "<name> val </name>" की तरह नहीं है।

दूसरा, जेएसओएन क्रमबद्धता गेम के लिए सबसे सहज ज्ञान युक्त है। एक्सएमएल और एक्सएमएल जैसी नोट्स मल्टीलाइन डेटा के लिए अच्छी हैं, लेकिन इन-गेम चर के मूल्य आमतौर पर छोटे होते हैं (एचपी, मन, एपी, क्षति, आदि) और एक पंक्ति के साथ अंकित किया जा सकता है।

तीसरा, एक्शनस्क्रिप्ट 3 (मुझे उम्मीद है कि आप एएस 2 में एमएमओ नहीं लिखेंगे) को JSON डिकोडिंग/एन्कोडिंग के लिए सही टूल मिल गए हैं। एक्सएमएल-पार्सिंग टूल्स भी अच्छे हैं, लेकिन आईएमओ, जेएसओएन बेहतर हैं। इसके अलावा, फ्लैश 11+ में, जेएसओएन ऑपरेशंस बेहद अनुकूलित हैं।

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

3

अच्छा समाधान एक मालिकाना प्रोटोकॉल है क्योंकि यह सही प्रदर्शन और यातायात अनुकूलन प्रदान करेगा।

हमने अपने ऑनलाइन पोकर के लिए सर्वश्रेष्ठ खोज करने के लिए विभिन्न प्रोटोकॉल का प्रयास किया है।

पहले दो बाइट्स एक पैकेज प्रकार है:

शोध के परिणाम अगले प्रोटोकॉल है। पैकेज के दूसरे दो बाइट पैकेज का आकार है। एन बाइट्स पैकेज शरीर

  1. लोड सॉकेट से अग्रणी 4 बाइट आकार और पैकेज के प्रकार मिलता है।
  2. लोड पैकेज शरीर
  3. संदेश पैकेज शरीर संदेश प्रकार हैंडलर
संबंधित मुद्दे