SOCKS రిలేలో పూర్తి ద్విదిశ ప్రవాహం మరియు బ్యాక్ప్రెషర్
అంచనా వేసిన ప్రతిస్పందన పరిమాణాలకు బదులుగా స్వతంత్ర బైట్ స్ట్రీమ్లు, పాక్షిక I/O, పరిమిత బఫర్లు మరియు బ్యాక్ప్రెషర్ చుట్టూ రిలే ప్రవాహాన్ని రూపకల్పన చేయండి.
SOCKS హ్యాండ్షేక్ విజయవంతమైంది. ఇప్పుడు రిలే క్లయింట్ నుండి చదువుతుంది, గమ్యస్థానానికి రాస్తుంది, పూర్తి ప్రతిస్పందన కోసం వేచి ఉంటుంది, ఆ తర్వాత మాత్రమే మళ్లీ క్లయింట్ నుండి చదువుతుంది. ఆ క్రమం పూర్తిగా చెల్లుబాటు అయ్యే అప్లికేషన్ను డెడ్లాక్ చేయగలదు.
TCP సొరంగం ఏర్పడిన తర్వాత, దాని లోపలి సందేశాలను SOCKS నిర్వచించదు. గమ్యస్థానం మొదట పంపవచ్చు. రెండు వైపులా స్వతంత్రంగా పంపవచ్చు. ఒక వైపు చిన్న రికార్డును పంపి, ఆ తర్వాత మరొక వైపు సమాధానం కోసం వేచి ఉండవచ్చు.
అంచనా వేసిన లావాదేవీలు కాదు, బైట్లను పంపండి
స్వీకరణ కాల్ దాని ఫ్లాగ్లు మరియు సాకెట్ స్థితి ప్రకారం అందుబాటులో ఉన్న బైట్లను తిరిగి ఇస్తుంది. ఇది సాధారణ రిలేకు అప్లికేషన్ ప్రతిస్పందన పూర్తయింది అని చెప్పదు. ఏదైనా పెద్ద బఫర్ నిండే వరకు వేచి ఉండటం, ప్రత్యర్థికి కొనసాగడానికి అవసరమైన చిన్న సందేశాన్ని పంపడాన్ని నిరోధించవచ్చు.
రెండు దిశలను సేవించడానికి అప్లికేషన్ యొక్క ఇప్పటికే ఉన్న సమకాలీన మోడల్ను ఉపయోగించండి: ఈవెంట్ లూప్, అసమకాలీక I/O లేదా ఉద్దేశపూర్వకంగా ఎంచుకున్న మరో డిజైన్. ముఖ్యమైన ప్రవర్తన ఏమిటంటే, ఒక దిశలో పురోగతికి మరో దిశలో కల్పిత సందేశ సరిహద్దు అవసరం లేదు.
రెండు పరిమిత వేచి ఉన్న బఫర్లను ఉంచండి
క్లయింట్ నుండి చదివిన డేటా ఇంకా గమ్యస్థానానికి చేరుకోవడానికి వేచి ఉండవచ్చు, అయితే గమ్యస్థానం నుండి వచ్చే డేటా క్లయింట్కు చేరుకోవడానికి వేచి ఉంటుంది. ఆ వేచి ఉన్న బైట్లను విడిగా ట్రాక్ చేయండి.
పంపడం అభ్యర్థించిన దానికంటే తక్కువ బైట్లను రాయవచ్చు. రాయని భాగాన్ని ఉంచండి; దాన్ని పడేయవద్దు లేదా మొత్తం బఫర్ను మళ్లీ ప్లే చేయవద్దు. తాత్కాలికంగా రాయలేని సాకెట్ సరైన సన్నద్ధత ఈవెంట్ కోసం వేచి ఉండటానికి కారణం, నిరంతరం తిరగడానికి కాదు.
బఫర్లను పరిమితం చేయండి. గమ్యస్థానం నెమ్మదిగా ఉంటే, అపరిమిత క్లయింట్ డేటాను చదవడం క్యూను రిలే మెమొరీలోకి మాత్రమే కదిలిస్తుంది. బ్యాక్ప్రెషర్ అంటే సంబంధిత వేచి ఉన్న బఫర్ నిండినప్పుడు చదవడాన్ని ఆపివేయడం మరియు రాతలు స్థలం కల్పించినప్పుడు తిరిగి ప్రారంభించడం.
ఒక దిశలో ముగింపుకు విధానం అవసరం
మరో దిశలో ఇంకా ఉపయోగకరమైన డేటా ఉన్నప్పుడు TCP పంపే దిశను మూసివేయవచ్చు. బఫర్ చేసిన బైట్లు ఖాళీ అయిన తర్వాత ఆ స్థితిని ఎలా వ్యాప్తి చేయాలి అని నిర్ణయించి, క్రమబద్ధమైన మూసివేతను లోపం లేదా గడువు నుండి వేరు చేయండి.
ఇవేవీ రిలే అప్లికేషన్ పేలోడ్ను డీక్రిప్ట్ చేయాలని లేదా పార్స్ చేయాలని కోరవు. దానికి సరైన స్ట్రీమ్ నిర్వహణ అవసరం. బఫర్ పరిమాణాన్ని మాత్రమే పెంచడం తప్పు వైపు వేచి ఉండే లేదా ప్రతి పఠనం ఒక పూర్తి అభ్యర్థనకు సరిపోతుందని భావించే రిలేను సరిచేయలేదు.