പ്രോക്സി വഴി അപൂർണ്ണ ചിത്രങ്ങൾ: Netty യുടെ എഴുത്ത് പൂർത്തീകരണം പരിശോധിക്കുക
പ്രോക്സി വഴി ചിത്രങ്ങൾ അപൂർണ്ണമായി എത്തുമ്പോൾ, അസിങ്ക്രോണസ് പ്രതികരണ എഴുത്ത് പൂർത്തിയാകുന്നതിന് മുമ്പ് ഉറവിടം അതിന്റെ Netty ചാനൽ അടയ്ക്കുന്നുണ്ടോ എന്ന് പരിശോധിക്കുക.
ഒരു ചിത്രം വേഗതയേറിയ നേരിട്ടുള്ള കണക്ഷനിൽ പ്രവർത്തിക്കുന്നു, പക്ഷേ മന്ദഗതിയിലുള്ള ഫോർവേഡ് പ്രോക്സി വഴി അപൂർണ്ണമാണ്. സാധ്യമായ ഒരു കാരണം, പ്രതികരണം ഇപ്പോഴും എഴുതപ്പെടുമ്പോൾ ഉറവിടം കണക്ഷൻ അടയ്ക്കുന്നതാണ്.
Netty I/O അസിങ്ക്രോണസ് ആണ്. writeAndFlush ൽ നിന്ന് മടങ്ങുന്നത് ആ പ്രവർത്തനം പൂർത്തിയായി എന്നർത്ഥമാക്കുന്നില്ല. അതിനാൽ ക്യൂവിൽ ഇപ്പോഴും ബൈറ്റുകളുള്ള ഒരു പ്രതികരണത്തിന് ഈ ക്രമം സുരക്ഷിതമല്ല:
ctx.writeAndFlush(response);
ctx.close();
അവസാന പ്രതികരണ സന്ദേശത്തിന് ശേഷം HTTP ഇടപെടൽ ബോധപൂർവ്വം അടയ്ക്കുമ്പോൾ, ആ എഴുത്തിന്റെ future ലേക്ക് അടയ്ക്കൽ ഘടിപ്പിക്കുക:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
ഈ ഭാഗം പ്രതികരണം ഇതിനകം ശരിയായി നിർമ്മിച്ച് ഫ്രെയിം ചെയ്തു എന്ന് അനുമാനിക്കുന്നു. സ്ട്രീം ചെയ്ത ബോഡിക്ക്, ഹെഡറുകളുടെ എഴുത്തല്ല, അതിന്റെ അവസാന സന്ദേശത്തിന്റെ പൂർത്തീകരണം ഉപയോഗിക്കുക. സ്ഥിരമായ HTTP കണക്ഷനിൽ, പ്രതികരണം തീർന്നു എന്ന് മാത്രം കരുതി അടയ്ക്കൽ ചേർക്കരുത്.
ആപ്ലിക്കേഷന്റെ സാധാരണ പിശക് കൈകാര്യം ചെയ്യലിന്റെ ഭാഗമായി future ന്റെ പരാജയം പരിശോധിക്കുക. പൂർത്തീകരണത്തിൽ പരാജയവും റദ്ദാക്കലും ഉൾപ്പെടുന്നു, അതിനാൽ പൂർത്തീകരണം മാത്രം ബ്രൗസറിൽ നിന്നുള്ള ഡെലിവറി രസീതിയല്ല.
ഉപയോഗപ്രദമായ താരതമ്യം ഓരോ പാതയിലെയും പൂർണ്ണ പ്രതികരണ ദൈർഘ്യവും എഴുത്തിന്റെ ഫലവുമാണ്. പ്രോക്സിക്ക് സമയം മാറ്റി നിലവിലുള്ള ഒരു ലൈഫ്സൈക്കിൾ പിശക് വെളിപ്പെടുത്താൻ കഴിയും; അതിന്റെ സാന്നിധ്യം അതിന്റെ കംപ്രസ്സറോ കാഷോ ബൈറ്റുകൾ വലിച്ചെറിഞ്ഞു എന്ന് തെളിയിക്കുന്നില്ല.