એક છબી ઝડપી સીધા કનેક્શન પર કામ કરે છે, પણ ધીમા ફોરવર્ડ પ્રોક્સી દ્વારા અધૂરી આવે છે. એક સંભવિત કારણ એ છે કે ઓરિજિન કનેક્શન બંધ કરે છે જ્યારે તેનો રિસ્પોન્સ હજી લખાઈ રહ્યો હોય છે.

Netty I/O અસિંક્રોનસ છે. writeAndFlush થી પાછા ફરવાનો અર્થ એ નથી કે તે ક્રિયા પૂર્ણ થઈ છે. તેથી જે રિસ્પોન્સમાં હજી કતારમાં બાઇટ્સ છે તેના માટે આ ક્રમ સુરક્ષિત નથી:

ctx.writeAndFlush(response);
ctx.close();

જ્યારે HTTP વિનિમય તેના છેલ્લા રિસ્પોન્સ સંદેશ પછી ઇરાદાપૂર્વક બંધ થાય છે, ત્યારે બંધને તે લેખનના future સાથે જોડો:

ctx.writeAndFlush(finalResponseMessage)
    .addListener(ChannelFutureListener.CLOSE);

આ ટુકડો ધારે છે કે રિસ્પોન્સ પહેલેથી જ યોગ્ય રીતે બનાવાયેલ અને ફ્રેમ થયેલ છે. સ્ટ્રીમ થયેલા બોડી માટે તેના છેલ્લા સંદેશની સમાપ્તિ વાપરો, હેડર્સનું લેખન નહીં. સ્થાયી HTTP કનેક્શન માટે, ફક્ત રિસ્પોન્સ પૂરો થયો છે એટલા માટે બંધ ઉમેરશો નહીં.

એપ્લિકેશનના સામાન્ય ભૂલ સંચાલનના ભાગ રૂપે future ની નિષ્ફળતા તપાસો. સમાપ્તિમાં નિષ્ફળતા અને રદ પણ સામેલ છે, તેથી ફક્ત સમાપ્તિ બ્રાઉઝર તરફથી ડિલિવરી રસીદ નથી.

ઉપયોગી સરખામણી એ દરેક માર્ગ પર સંપૂર્ણ રિસ્પોન્સ લંબાઈ અને લેખનનું પરિણામ છે. પ્રોક્સી સમય એટલો બદલી શકે છે કે હાલની લાઇફસાઇકલ ભૂલ પ્રગટ થાય; તેની હાજરી એ સાબિત કરતી નથી કે તેના કોમ્પ્રેસર અથવા કેશે બાઇટ્સ ફેંકી દીધા છે.

સંબંધિત લેખો