არასრული სურათები პროქსის მეშვეობით: შეამოწმეთ Netty-ის ჩაწერის დასრულება
როცა სურათები პროქსის მეშვეობით არასრული მოდის, შეამოწმეთ ხურავს თუ არა წყარო Netty-ის არხს ასინქრონული პასუხის ჩაწერის დასრულებამდე.
სურათი მუშაობს სწრაფ პირდაპირ კავშირზე, მაგრამ ნელი forward პროქსის მეშვეობით არასრულია. ერთი შესაძლო მიზეზია, რომ წყარო კავშირს ხურავს, სანამ მისი პასუხი ჯერ კიდევ იწერება.
Netty-ის I/O ასინქრონულია. writeAndFlush-იდან დაბრუნება არ ნიშნავს, რომ ოპერაცია დასრულდა. ამიტომ ეს თანმიმდევრობა უსაფრთხო არ არის პასუხისთვის, რომელსაც ჯერ კიდევ აქვს ბაიტები რიგში:
ctx.writeAndFlush(response);
ctx.close();
როცა HTTP გაცვლა განზრახ იხურება მისი ბოლო პასუხის შეტყობინების შემდეგ, დახურვა მიამაგრეთ ამ ჩაწერის future-ს:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
ფრაგმენტი ვარაუდობს, რომ პასუხი უკვე სწორად აწყობილი და ჩარჩოში მოქცეულია. ნაკადოვანი სხეულისთვის გამოიყენეთ მისი ბოლო შეტყობინების დასრულება და არა სათაურების ჩაწერა. მუდმივი HTTP კავშირისთვის ნუ დაამატებთ დახურვას მხოლოდ იმიტომ, რომ პასუხი დასრულდა.
შეამოწმეთ future-ის წარუმატებლობა აპლიკაციის ჩვეულებრივი შეცდომების დამუშავების ნაწილად. დასრულება მოიცავს წარუმატებლობასა და გაუქმებას, ამიტომ დასრულება თავისთავად ბრაუზერიდან მიწოდების ქვითარი არ არის.
სასარგებლო შედარებაა პასუხის სრული სიგრძე და ჩაწერის შედეგი თითოეულ გზაზე. პროქსის შეუძლია დრო იმდენად შეცვალოს, რომ გამოავლინოს არსებული სასიცოცხლო ციკლის შეცდომა; მისი არსებობა არ ამტკიცებს, რომ მისმა კომპრესორმა ან ქეშმა ბაიტები გადააგდო.