Una imatge funciona per una connexió directa ràpida, però arriba incompleta a través d'un proxy directe més lent. Una causa possible és que l'origen tanqui la connexió mentre encara s'escriu la resposta.

L'E/S de Netty és asíncrona. Tornar de writeAndFlush no significa que l'operació s'hagi completat. Per tant, aquest ordre no és segur per a una resposta que encara té bytes a la cua:

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

Quan l'intercanvi HTTP es tanca intencionadament després del seu darrer missatge de resposta, adjunteu el tancament al future d'aquesta escriptura:

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

El fragment assumeix que la resposta ja s'ha construït i emmarcat correctament. Per a un cos transmès en flux, feu servir l'acabament del darrer missatge, no l'escriptura de les capçaleres. Per a una connexió HTTP persistent, no afegiu un tancament només perquè una resposta hagi acabat.

Examineu el falliment del future com a part del maneig normal d'errors de l'aplicació. L'acabament inclou el falliment i la cancel·lació, així que l'acabament per si sol no és un rebut de lliurament del navegador.

La comparació útil és la longitud completa de la resposta i el resultat de l'escriptura a cada camí. Un proxy pot canviar prou el temps per revelar un error de cicle de vida existent; la seva presència no demostra que el seu compressor o memòria cau hagi descartat els bytes.

Articles relacionats