2012-04-03 17 views
5

मैं एक मल्टीप्लेयर गेम बनाना चाहता हूं जो इंटरनेट पर चलता है, न केवल कम विलंबता, लैन जैसे उच्च थ्रुपुट वातावरण।मिक्सिंग टीसीपी और यूडीपी

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

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

तो, यूडीपी के शीर्ष पर टीसीपी जैसी सुविधाओं को लागू करने के बजाय, (डेटा बफर के साथ, उनके ऑर्डर को निर्धारित करने के लिए संख्याओं के साथ लेबलिंग पैकेट, पैकेट पावती प्रणाली), जो यह सुनिश्चित करने के लिए काम का एक टन होगा कि यह सही ढंग से काम करता है और कुशलता से, मैं एक ही समय में टीसीपी और यूडीपी का उपयोग करना चाहता हूं।

हालांकि, मैंने सुना है कि टीसीपी और यूडीपी बैंडविड्थ के लिए एक-दूसरे से लड़ सकते हैं यदि आप एक साथ एक साथ उपयोग करते हैं, और टीसीपी का उपयोग यूडीपी गिराए गए पैकेट की दर में वृद्धि करेगा। क्या यह वास्तव में सच है? क्या इन दो प्रोटोकॉल को मिलाते समय मुझे कोई अन्य समस्याएं सौंपनी पड़ेगी?

+0

सबकुछ बैंडविड्थ के लिए झगड़ा करता है। – Mat

+1

@ अच्छी तरह से हाँ, लेकिन मैंने सुना है कि यूसीपी पर टीसीपी या 100 केबी/एस पर 100 किलोबाइट/एस के प्रत्येक के 50 केबी/एस से अधिक विलंब और कम विलंबता होगी। – newprogrammer

+0

@ न्यूप्रोग्रामर आपने इसे 'सुना' कहां? कृपया उद्धरण – EJP

उत्तर

1

यदि आपको कठिनाइयों का सामना करना पड़ रहा है, तो मैं सुझाव देता हूं कि आप और आपके नेटवर्किंग कोड के गले के बीच अमूर्तता की एक अतिरिक्त परत डालें। "राकनेट" जैसी मल्टीप्लेयर नेटवर्किंग लाइब्रेरी आज़माएं।

+0

राकनेट – newprogrammer

+0

@ न्यूप्रोग्रामर का कोई तरीका नहीं है क्या आप 100k से अधिक कमा रहे हैं? यदि यह मुफ़्त नहीं है। http://en.wikipedia.org/wiki/Raknet – awiebe

+0

हे, मैं चीजें बहुत अच्छी तरह से नहीं पढ़ता, धन्यवाद – newprogrammer

1

आप http://www.zeromq.org/, एक अच्छा ओपनसोर्स बुद्धिमान परिवहन परत पुस्तकालय की जांच कर सकते हैं।

0

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

0

आईपीआरएफ आज़माएं और आप देखेंगे कि अगर डाउनलोड के लिए एक टीसीपी कनेक्शन 100 एमबी/एस यूडीपी डाउनलोड यातायात को मजबूर करने के लिए 100 एमबी/एस लाइन साझा करना है, तो आप मोटे तौर पर 50 एमबी/एस और भेजे गए यूडीपी पैकेट की आधे संख्या (यानी, लगभग 50% की यूडीपी ड्रॉप दर) प्राप्त करें।

+0

यह एक विवरण है जो वास्तव में होगा, वास्तव में एक * स्पष्टीकरण * क्यों नहीं है। – GhostCat

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