ప్రాక్సీ ద్వారా అసంపూర్ణ చిత్రాలు: Netty వ్రాత పూర్తిని తనిఖీ చేయండి
ప్రాక్సీ ద్వారా చిత్రాలు అసంపూర్ణంగా వచ్చినప్పుడు, అసింక్రోనస్ ప్రతిస్పందన వ్రాత పూర్తికాకముందు మూలం తన Netty ఛానెల్ను మూస్తుందో లేదో తనిఖీ చేయండి.
ఒక చిత్రం వేగవంతమైన ప్రత్యక్ష కనెక్షన్లో పనిచేస్తుంది, కానీ నెమ్మదైన ఫార్వర్డ్ ప్రాక్సీ ద్వారా అసంపూర్ణంగా ఉంటుంది. సంభావ్య కారణం ఏమిటంటే, దాని ప్రతిస్పందన ఇంకా వ్రాయబడుతుండగా మూలం కనెక్షన్ను మూస్తుంది.
Netty I/O అసింక్రోనస్. writeAndFlush నుండి తిరిగి రావడం అంటే ఆ ఆపరేషన్ పూర్తయిందని కాదు. అందువల్ల క్యూలో ఇంకా బైట్లు ఉన్న ప్రతిస్పందనకు ఈ క్రమం సురక్షితం కాదు:
ctx.writeAndFlush(response);
ctx.close();
HTTP మార్పిడి తన చివరి ప్రతిస్పందన సందేశం తర్వాత ఉద్దేశపూర్వకంగా మూసివేయబడుతున్నప్పుడు, మూసివేతను ఆ వ్రాత future కు జోడించండి:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
ఈ భాగం ప్రతిస్పందన ఇప్పటికే సరిగ్గా నిర్మించబడి ఫ్రేమ్ చేయబడిందని ఊహిస్తుంది. స్ట్రీమ్ చేసిన బాడీకి హెడర్ల వ్రాత కాదు, దాని చివరి సందేశం పూర్తికావడాన్ని ఉపయోగించండి. నిరంతర HTTP కనెక్షన్ కోసం, ప్రతిస్పందన ముగిసిందనే కారణంతో మాత్రమే మూసివేతను జోడించవద్దు.
అప్లికేషన్ సాధారణ లోప నిర్వహణలో భాగంగా future వైఫల్యాన్ని పరిశీలించండి. పూర్తికావడంలో వైఫల్యం మరియు రద్దు కూడా ఉంటాయి, కాబట్టి పూర్తికావడం మాత్రమే బ్రౌజర్ నుండి డెలివరీ రసీదు కాదు.
ఉపయోగకరమైన పోలిక ప్రతి మార్గంలో పూర్తి ప్రతిస్పందన పొడవు మరియు వ్రాత ఫలితం. ప్రాక్సీ సమయాన్ని సరిపడా మార్చి ఇప్పటికే ఉన్న జీవిత చక్ర లోపాన్ని బయటపెట్టగలదు; దాని ఉనికి దాని కంప్రెసర్ లేదా కాష్ బైట్లను పారవేసిందని రుజువు చేయదు.