'n Prent werk oor 'n vinnige direkte verbinding, maar is onvolledig deur 'n stadiger forward-proxy. Een moontlike oorsaak is dat die oorsprong die verbinding sluit terwyl sy antwoord nog geskryf word.

Netty se I/O is asinchronies. Om uit writeAndFlush terug te keer beteken nie dat daardie bewerking voltooi is nie. Hierdie volgorde is dus onveilig vir 'n antwoord met grepe wat nog in die tou staan:

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

Wanneer die HTTP-uitruiling doelbewus sluit ná sy finale antwoordboodskap, koppel die sluiting aan daardie skryf se future:

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

Die fragment aanvaar dat die antwoord reeds korrek opgebou en geram is. Vir 'n gestroomde liggaam moet die voltooiing van die finale boodskap gebruik word, nie die skryf van die koptekste nie. Vir 'n aanhoudende HTTP-verbinding moet 'n sluiting nie bygevoeg word bloot omdat 'n antwoord klaar is nie.

Ondersoek die future se mislukking as deel van die toepassing se normale foutafhandeling. Voltooiing sluit mislukking en kansellasie in, dus is voltooiing alleen nie 'n afleweringsbewys van die blaaier nie.

Die nuttige vergelyking is die volledige antwoordlengte en die skryfuitkoms op elke pad. 'n Proxy kan die tydsberekening genoeg verander om 'n bestaande lewenssiklusfout te openbaar; die teenwoordigheid daarvan bewys nie dat sy kompressor of kas die grepe weggegooi het nie.

Verwante artikels