Bildo funkcias tra rapida rekta konekto, sed estas nekompleta tra pli malrapida antaŭa prokurilo. Unu ebla kaŭzo estas, ke la origino fermas la konekton dum ĝia respondo ankoraŭ skribiĝas.

Netty I/O estas asinkrona. Reveno de writeAndFlush ne signifas, ke tiu operacio finiĝis. Tial ĉi tiu ordo estas nesekura por respondo, kiu ankoraŭ havas bajtojn en la atendovico:

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

Kiam la HTTP-interŝanĝo intence fermiĝas post sia lasta responda mesaĝo, alligu la fermon al la future de tiu skribo:

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

La fragmento supozas, ke la respondo jam estas ĝuste konstruita kaj kadrigita. Por elsendfluigita korpo uzu la finiĝon de ĝia lasta mesaĝo, ne la skribon de ĝiaj kapoj. Por daŭra HTTP-konekto, ne aldonu fermon nur ĉar respondo finiĝis.

Esploru la malsukceson de la future kiel parton de la normala erlotraktado de la aplikaĵo. Finiĝo inkluzivas malsukceson kaj nuligon, do finiĝo sola ne estas livera konfirmo de la retumilo.

La utila komparo estas la kompleta responda longo kaj la skriba rezulto sur ĉiu vojo. Prokurilo povas ŝanĝi la tempigon sufiĉe por malkaŝi ekzistantan vivciklan eraron; ĝia ĉeesto ne pruvas, ke ĝia kompresilo aŭ kaŝmemoro forĵetis la bajtojn.

Rilataj artikoloj