Picha hufanya kazi kwenye muunganisho wa moja kwa moja wa haraka, lakini haijakamilika kupitia proksi ya mbele ya polepole zaidi. Sababu moja inayowezekana ni kwamba asili inafunga muunganisho wakati jibu lake bado linaandikwa.

Netty I/O ni asinkronia. Kurudi kutoka writeAndFlush hakumaanishi kwamba operesheni hiyo imekamilika. Kwa hiyo mpangilio huu si salama kwa jibu ambalo bado lina baiti kwenye foleni:

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

Wakati mabadilishano ya HTTP yanafungwa kwa kukusudia baada ya ujumbe wake wa mwisho wa jibu, ambatisha ufungaji kwenye future ya uandishi huo:

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

Kipande hiki kinadhani jibu tayari limejengwa na kupangwa kwa usahihi. Kwa mwili unaotiririka, tumia ukamilishaji wa ujumbe wake wa mwisho, si uandishi wa vichwa. Kwa muunganisho wa HTTP unaodumu, usiongeze ufungaji kwa sababu tu jibu limekwisha.

Chunguza kushindwa kwa future kama sehemu ya utunzaji wa kawaida wa makosa ya programu. Ukamilishaji unajumuisha kushindwa na kughairi, kwa hiyo ukamilishaji peke yake si risiti ya uwasilishaji kutoka kwa kivinjari.

Ulinganisho unaofaa ni urefu kamili wa jibu na matokeo ya uandishi kwenye kila njia. Proksi inaweza kubadilisha muda wa kutosha kufichua hitilafu iliyopo ya mzunguko wa maisha; uwepo wake hauthibitishi kwamba compressor au akiba yake ilitupa baiti.

Makala zinazohusiana