Nepilni vaizdai per tarpinį serverį: patikrinkite Netty rašymo pabaigą
Kai vaizdai per tarpinį serverį ateina nepilni, patikrinkite, ar šaltinis neuždaro Netty kanalo prieš baigiantis asinchroniniam atsakymo rašymui.
Vaizdas veikia greitu tiesioginiu ryšiu, bet yra nepilnas per lėtesnį perdavimo tarpinį serverį. Viena galima priežastis – šaltinis uždarė ryšį, kol jo atsakymas dar rašomas.
Netty I/O yra asinchroninis. Grįžimas iš writeAndFlush nereiškia, kad operacija baigta. Todėl ši tvarka nesaugi atsakymui, kuris dar turi baitų eilėje:
ctx.writeAndFlush(response);
ctx.close();
Kai HTTP mainai sąmoningai uždaromi po paskutinio atsakymo pranešimo, uždarymą prijunkite prie to rašymo future:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
Šis fragmentas daro prielaidą, kad atsakymas jau teisingai sudarytas ir įrėmintas. Srautinio kūno atveju naudokite paskutinio pranešimo pabaigą, o ne antraščių rašymą. Nuolatiniam HTTP ryšiui nepridėkite uždarymo vien todėl, kad atsakymas baigėsi.
Nagrinėkite future nesėkmę kaip įprasto programos klaidų apdorojimo dalį. Pabaiga apima nesėkmę ir atšaukimą, todėl vien pabaiga nėra pristatymo patvirtinimas iš naršyklės.
Naudingas palyginimas – visa atsakymo ilgis ir rašymo rezultatas kiekviename kelyje. Tarpinis serveris gali pakankamai pakeisti laiką, kad atskleistų esamą gyvavimo ciklo klaidą; jo buvimas neįrodo, kad jo kompresorius ar podėlis išmetė baitus.