कई छोटे पैकेज ठीक हैं। वास्तव में, यदि आप टीसीपी ओवरहेड के बारे में चिंतित हैं, तो बस एक डालेंbufferstream
1500 चार्ट्स (या जो भी आपके टीसीपी एमटीयू है, उसे गतिशील रूप से अनुरोध करने के लिए सबसे अच्छा है) , और एक स्थान पर समस्या से निपटें। ऐसा करने से आपको हर अतिरिक्त पैकेज के लिए ~ 40 बाइट्स का ओवरहेड मिल जाता है जो आपने अन्यथा बनाया होता।
उस ने कहा, यह अभी भी कम डेटा भेजने के लिए बेहतर है, और बड़ी वस्तुओं के निर्माण में मदद करता है। बेशक यह भेजने की "UID:10|1|2|3
तुलना में छोटा है UID:10;x:1UID:10;y:2UID:10;z:3
। वास्तव में, इस बिंदु पर भी आपको पहिया को सुदृढ़ नहीं किया जाना चाहिए, प्रोटोबुफ़ जैसी लाइब्रेरी का उपयोग करें जो डेटा को 10 बाइट स्ट्रिंग या उससे कम कर सकता है।
केवल एक चीज जिसे आपको नहीं भूलना चाहिए, वह है Flush
प्रासंगिक स्थानों पर अपनी स्ट्रीम पर एक कमांड डालना, क्योंकि जैसे ही आप अपनी स्ट्रीम में डेटा जोड़ना बंद करते हैं, यह कुछ भी भेजने से पहले अनंत प्रतीक्षा कर सकता है। वास्तव में समस्याग्रस्त है जब आपका ग्राहक उस डेटा की प्रतीक्षा कर रहा है, और जब तक कि ग्राहक अगली कमांड नहीं भेजते तब तक आपका गंभीर कुछ भी नया नहीं भेजेगा।
पैकेज की हानि ऐसी चीज है जिसे आप यहां, मामूली रूप से प्रभावित कर सकते हैं। आपके द्वारा भेजा गया प्रत्येक बाइट संभावित रूप से दूषित हो सकता है, और टीसीपी स्वचालित रूप से एक पुनः प्राप्ति का अनुरोध करेगा। छोटे पैकेज का मतलब है कि हर एक पैकेज के भ्रष्ट होने की संभावना कम है, लेकिन क्योंकि वे ओवरहेड पर जोड़ते हैं, आप और भी अधिक बाइट भेजते हैं, एक खोए हुए पैकेज की बाधाओं को और अधिक बढ़ाते हैं। जब एक पैकेज खो जाता है, तो टीसीपी सभी सफल डेटा को तब तक बफर करेगा जब तक कि लापता पैकेज को फिर से शुरू और प्राप्त नहीं किया जाता है। यह एक बड़ी देरी (पिंग) में परिणाम है। जबकि पैकेज की हानि के कारण बैंडविड्थ में कुल नुकसान नगण्य हो सकता है, उच्च पिंग खेल के लिए अवांछनीय होगा।
निचला रेखा: जितना संभव हो उतना कम डेटा भेजें, बड़े पैकेज भेजें, और ऐसा करने के लिए अपने स्वयं के निम्न स्तर के तरीके न लिखें, लेकिन bufferstream
भारी उठाने को संभालने के लिए अच्छी तरह से ज्ञात पुस्तकालयों और जैसे और प्रोटोबुफ़ पर भरोसा करें ।