Պատկերը աշխատում է արագ ուղղակի կապով, բայց ավելի դանդաղ forward պրոքսիի միջով անավարտ է գալիս։ Հնարավոր պատճառներից մեկն այն է, որ սկզբնաղբյուրը փակում է կապը, մինչ պատասխանը դեռ գրվում է։

Netty-ի I/O-ն ասինխրոն է։ writeAndFlush-ից վերադառնալը չի նշանակում, որ այդ գործողությունն ավարտված է։ Ուստի այս հաջորդականությունը անվտանգ չէ այն պատասխանի համար, որում դեռ հերթում բայթեր կան.

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

Երբ HTTP փոխանակումը դիտավորյալ փակվում է իր վերջին պատասխան հաղորդագրությունից հետո, փակումը կցեք այդ գրառման future-ին.

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

Հատվածը ենթադրում է, որ պատասխանն արդեն ճիշտ կառուցված և շրջանակված է։ Հոսքային մարմնի համար օգտագործեք նրա վերջին հաղորդագրության ավարտը, ոչ թե վերնագրերի գրառումը։ Մշտական HTTP կապի համար մի ավելացրեք փակում միայն այն պատճառով, որ պատասխանն ավարտվել է։

Ուսումնասիրեք future-ի ձախողումը որպես հավելվածի սովորական սխալների մշակման մաս։ Ավարտը ներառում է ձախողում և չեղարկում, ուստի ավարտը ինքնին դիտարկիչից առաքման անդորրագիր չէ։

Օգտակար համեմատությունը յուրաքանչյուր ուղու վրա պատասխանի ամբողջ երկարությունն ու գրառման արդյունքն է։ Պրոքսին կարող է այնքան փոխել ժամանակավորումը, որ բացահայտի առկա կյանքի ցիկլի սխալ; դրա առկայությունը չի ապացուցում, որ նրա սեղմիչը կամ քեշը դեն նետել է բայթերը։

Առնչվող հոդվածներ