Imatges incompletes a través d'un proxy: comproveu l'acabament d'escriptura de Netty
Quan les imatges arriben incompletes a través d'un proxy, examineu si l'origen tanca el seu canal Netty abans que s'acabi l'escriptura asíncrona de la resposta.
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.