मुझे पता है, मैं ढेर सारे प्रश्न पूछ रहा हूँ ... लेकिन एक नए डेल्फी डेवलपर के रूप में मैं का उपयोग कर इन सब सवालों :)इंडी लिखें बफरिंग/कुशल टीसीपी संचार
टीसीपी संचार के साथ यह एक सौदों से अधिक गिरने रखना इंडी 10. संचार को कुशल बनाने के लिए, मैं एक क्लाइंट ऑपरेशन अनुरोध को एक बाइट के रूप में कोड करता हूं (अधिकांश परिदृश्यों में पाठ्यक्रम के अन्य डेटा बाइट्स के बाद, लेकिन इस मामले में केवल एक एकल बाइट)। समस्या यह है कि
var Bytes : TBytes;
...
SetLength (Bytes, 1);
Bytes [0] := OpCode;
FConnection.IOHandler.Write (Bytes, 1);
ErrorCode := Connection.IOHandler.ReadByte;
कि बाइट तुरंत नहीं भेजा जाता है (कम से कम सर्वर पर अमल हैंडलर लागू नहीं है) है। अगर मैं '1' को '9' में बदलता हूं उदाहरण के लिए सब कुछ ठीक काम करता है। मैं मान लिया है कि इंडी निवर्तमान बाइट्स बफ़र्स और
FConnection.IOHandler.WriteBufferClose;
साथ लिखने बफरिंग को निष्क्रिय करने की कोशिश की, लेकिन यह मदद नहीं की। मैं एक बाइट कैसे भेज सकता हूं और यह सुनिश्चित कर सकता हूं कि इसे तुरंत भेज दिया जाए? और - मैं यहां एक और छोटा सवाल जोड़ता हूं - इंडी का उपयोग करके पूर्णांक भेजने का सबसे अच्छा तरीका क्या है? दुर्भाग्य से मैं TIdTCPServer की IOHandler में WriteInteger की तरह समारोह नहीं मिल सकता है ... और
WriteLn (IntToStr (SomeIntVal))
मेरे लिए बहुत कुशल नहीं लगता है। क्या इससे कोई फर्क पड़ता है कि क्या मैं एक पंक्ति में एकाधिक लेखन कमांड का उपयोग करता हूं या चीजों को एक बाइट सरणी में पैक करता हूं और उसे एक बार भेजता हूं?
किसी भी उत्तर के लिए धन्यवाद!
संपादित करें: मैंने संकेत दिया कि मैं इंडी 10 का उपयोग कर रहा हूं क्योंकि पढ़ने और लिखने की प्रक्रियाओं के संबंध में बड़े बदलाव होने लगते हैं।
ध्यान दें कि 1 बाइट भेजने अधिक बाइट्स भेजने की तुलना में अधिक कुशल नहीं है प्राप्त कर सकते हैं। आपको शायद टीसीपी/आईपी, पैकेट आकार, स्थानांतरण ओवरहेड और सब कुछ पढ़ना चाहिए। पुराने इंटरनेट प्रोटोकॉल का अधिकांश उपयोग टेक्स्ट का उपयोग करने का एक कारण है, भले ही डेटा आकार बाइनरी डेटा से बड़ा हो। – mghie
यह आदेश एक अपवाद है। अधिकांश कमांड कमांड पैरामीटर के लिए अधिक बाइट्स जोड़ते हैं। मैंने सोचा कि चीजों को जितना संभव हो उतना करीब पैक करना बुरा नहीं हो सकता है। या मैं यहाँ गलत हूँ? – jpfollenius
जब तक आपका पूरा डेटा फ्रेम एक टीसीपी पैकेट में फिट बैठता है, तब तक इसे बहुत अंतर नहीं करना चाहिए। जब टेक्स्ट डिबगिंग की बात आती है तो टेक्स्ट आधारित प्रोटोकॉल ओटीओएच एक बड़ी मदद होती है। – mghie