Kuva toimii nopealla suoralla yhteydellä, mutta on puutteellinen hitaamman edelleen välittävän välityspalvelimen kautta. Yksi mahdollinen syy on, että lähde sulkee yhteyden, kun sen vastausta vielä kirjoitetaan.

Netty I/O on asynkroninen. writeAndFlushista palaaminen ei tarkoita, että toiminto on valmistunut. Siksi tämä järjestys ei ole turvallinen vastaukselle, jolla on vielä tavuja jonossa:

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

Kun HTTP-vaihto suljetaan tarkoituksella viimeisen vastausviestinsä jälkeen, liitä sulkeminen kyseisen kirjoituksen futureen:

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

Katkelma olettaa, että vastaus on jo rakennettu ja kehystetty oikein. Suoratoistetulle rungolle käytä sen viimeisen viestin valmistumista äläkä otsikoiden kirjoitusta. Pysyvälle HTTP-yhteydelle älä lisää sulkemista vain siksi, että vastaus päättyi.

Tutki futuren epäonnistuminen osana sovelluksen tavanomaista virheenkäsittelyä. Valmistuminen sisältää epäonnistumisen ja peruutuksen, joten valmistuminen yksin ei ole selaimen toimituskuitti.

Hyödyllinen vertailu on vastauksen kokonaispituus ja kirjoituksen tulos kullakin polulla. Välityspalvelin voi muuttaa ajoitusta tarpeeksi paljastaakseen olemassa olevan elinkaarivirheen; sen läsnäolo ei todista, että sen pakkaaja tai välimuisti hylkäsi tavut.

Aiheeseen liittyvät artikkelit