SOCKS रिलेमधील पूर्ण-दुहेरी प्रवाह आणि बॅकप्रेशर
अंदाजित प्रतिसाद आकारांऐवजी स्वतंत्र बाइट प्रवाह, आंशिक I/O, मर्यादित बफर आणि बॅकप्रेशरभोवती रिले प्रवाहाची रचना करा.
SOCKS हँडशेक यशस्वी झाला. आता रिले क्लायंटकडून वाचतो, गंतव्यस्थानाकडे लिहितो, पूर्ण प्रतिसादाची वाट पाहतो आणि त्यानंतरच पुन्हा क्लायंटकडून वाचतो. हा क्रम पूर्णपणे वैध अनुप्रयोगाला डेडलॉक करू शकतो.
TCP बोगदा तयार झाल्यावर, SOCKS त्यातील संदेश परिभाषित करत नाही. गंतव्यस्थान प्रथम पाठवू शकते. दोन्ही बाजू स्वतंत्रपणे पाठवू शकतात. एक बाजू एक छोटा रेकॉर्ड पाठवून नंतर दुसऱ्याच्या उत्तराची वाट पाहू शकते.
अंदाजित व्यवहार नाही, बाइट्स पाठवा
रिसीव्ह कॉल त्याच्या फ्लॅग्ज आणि सॉकेट स्थितीनुसार उपलब्ध बाइट्स परत करतो. तो सामान्य रिलेला अनुप्रयोगाचा प्रतिसाद पूर्ण झाला आहे असे सांगत नाही. अनियंत्रित मोठा बफर भरण्याची वाट पाहणे, समवयस्काला पुढे जाण्यासाठी आवश्यक असलेला छोटा संदेश पाठवण्यास प्रतिबंध करू शकते.
दोन्ही दिशा सांभाळण्यासाठी अनुप्रयोगाचे विद्यमान समवर्ती मॉडेल वापरा: इव्हेंट लूप, असिंक्रोनस I/O किंवा इतर जाणीवपूर्वक निवडलेली रचना. महत्त्वाचे वर्तन हे आहे की एका दिशेतील प्रगतीसाठी दुसऱ्या दिशेत काल्पनिक संदेश सीमा आवश्यक नाही.
दोन मर्यादित प्रलंबित बफर ठेवा
क्लायंटकडून वाचलेला डेटा अजूनही गंतव्यस्थानापर्यंत पोहोचण्याची वाट पाहत असू शकतो, तर गंतव्यस्थानाकडील डेटा क्लायंटपर्यंत पोहोचण्याची वाट पाहत असतो. त्या प्रलंबित बाइट्सचा स्वतंत्रपणे मागोवा घ्या.
पाठवणे विनंती केलेल्यापेक्षा कमी बाइट्स लिहू शकते. न लिहिलेला भाग ठेवा; तो टाकून द्या असे करू नका किंवा संपूर्ण बफर पुन्हा चालवू नका. तात्पुरते न लिहिता येणारे सॉकेट योग्य तयारी इव्हेंटची वाट पाहण्याचे कारण आहे, सतत फिरण्याचे नाही.
बफर मर्यादित करा. गंतव्यस्थान हळू असल्यास, अमर्यादित क्लायंट डेटा वाचत राहणे रांग फक्त रिलेच्या मेमरीमध्ये हलवते. बॅकप्रेशर म्हणजे संबंधित प्रलंबित बफर भरल्यावर वाचन थांबवणे आणि लेखन जागा मोकळी करताच पुन्हा सुरू करणे.
एका दिशेतील शेवटाला धोरण आवश्यक
दुसरी दिशा अजूनही उपयुक्त डेटा असताना TCP पाठवण्याची दिशा बंद करू शकते. बफर केलेले बाइट्स संपल्यानंतर ती स्थिती कशी पाठवायची हे ठरवा, आणि नियमित बंदीला त्रुटी किंवा मुदतीपासून वेगळे ठेवा.
यापैकी काहीही रिलेला अनुप्रयोगाचा पेलोड डिक्रिप्ट किंवा पार्स करण्याची आवश्यकता नाही. त्याला योग्य प्रवाह हाताळणी आवश्यक आहे. फक्त बफर आकार वाढवणे चुकीच्या बाजूची वाट पाहणारा किंवा प्रत्येक वाचन एका संपूर्ण विनंतीशी जुळते असे गृहीत धरणारा रिले दुरुस्त करू शकत नाही.