Hiányos képek proxyn keresztül: ellenőrizze a Netty írásának befejeződését
Amikor a képek proxyn keresztül hiányosan érkeznek, vizsgálja meg, hogy az eredet lezárja-e a Netty csatornát, mielőtt az aszinkron válaszírás befejeződik.
Egy kép gyors közvetlen kapcsolaton működik, de egy lassabb forward proxyn keresztül hiányos. Egy lehetséges ok, hogy az eredet lezárja a kapcsolatot, miközben a válasz még íródik.
A Netty I/O aszinkron. A writeAndFlush-ból való visszatérés nem jelenti azt, hogy a művelet befejeződött. Ezért ez a sorrend nem biztonságos olyan válasz esetén, amelynek még vannak sorban álló bájtjai:
ctx.writeAndFlush(response);
ctx.close();
Amikor a HTTP-csere szándékosan bezárul az utolsó válaszüzenete után, kapcsolja a lezárást az írás future-jéhez:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
A részlet feltételezi, hogy a válasz már helyesen fel van építve és keretezve. Streamelt törzs esetén az utolsó üzenet befejeződését használja, ne a fejlécek írását. Állandó HTTP-kapcsolat esetén ne adjon hozzá lezárást csak azért, mert egy válasz befejeződött.
Vizsgálja meg a future hibáját az alkalmazás szokásos hibakezelésének részeként. A befejeződés magában foglalja a hibát és a megszakítást, így a befejeződés önmagában nem a böngésző kézbesítési visszaigazolása.
A hasznos összehasonlítás a válasz teljes hossza és az írás eredménye minden útvonalon. A proxy eléggé megváltoztathatja az időzítést, hogy felfedjen egy meglévő életciklus-hibát; jelenléte nem bizonyítja, hogy a tömörítője vagy a gyorsítótára eldobta a bájtokat.