SOCKS-ის ხელის ჩამორთმევა წარმატებით დასრულდა. ახლა რელე კითხულობს კლიენტისგან, წერს დანიშნულებისამდე, ელოდება სრულ პასუხს და მხოლოდ ამის შემდეგ კითხულობს ისევ კლიენტისგან. ამ თანმიმდევრობამ შეიძლება სრულიად სწორი აპლიკაცია ჩიხში მოაქციოს.

TCP გვირაბის დამყარების შემდეგ SOCKS არ განსაზღვრავს მის შიგნით არსებულ შეტყობინებებს. დანიშნულებამ შეიძლება პირველმა გაგზავნოს. ორივე მხარეს შეუძლია დამოუკიდებლად გაგზავნა. ერთმა მხარემ შეიძლება მოკლე ჩანაწერი გაგზავნოს და შემდეგ მეორის პასუხს დაელოდოს.

გადასცემთ ბაიტებს და არა გამოცნობილ ტრანზაქციებს

მიღების გამოძახება აბრუნებს ხელმისაწვდომ ბაიტებს მისი დროშებისა და სოკეტის მდგომარეობის მიხედვით. ის არ ეუბნება ზოგად რელეს, რომ აპლიკაციის პასუხი დასრულებულია. თვითნებურად დიდი ბუფერის ავსებას დალოდებამ შეიძლება ხელი შეუშალოს იმ პატარა შეტყობინების გაგზავნას, რომელიც პარტნიორს გაგრძელებისთვის სჭირდება.

ორივე მიმართულების მოსამსახურებლად გამოიყენეთ აპლიკაციის არსებული პარალელურობის მოდელი: მოვლენების ციკლი, ასინქრონული I/O ან სხვა განზრახ არჩეული დიზაინი. მნიშვნელოვანია, რომ წინსვლა ერთი მიმართულებით არ მოითხოვდეს გამოგონილ შეტყობინების საზღვარს მეორეში.

შეინახეთ ორი შეზღუდული მოლოდინის ბუფერი

კლიენტისგან წაკითხული მონაცემები შეიძლება ჯერ კიდევ დანიშნულებამდე მისვლას ელოდებოდეს, ხოლო დანიშნულებიდან მიღებული მონაცემები კლიენტამდე მისვლას ელოდება. თვალყური ადევნეთ ამ მოლოდინის ბაიტებს ცალ-ცალკე.

გაგზავნამ შეიძლება ნაკლები ბაიტი ჩაწეროს, ვიდრე მოითხოვეს. შეინარჩუნეთ არჩაწერილი ნაწილი; ნუ გადააგდებთ და ნუ გაიმეორებთ მთელ ბუფერს. დროებით ჩაუწერელ სოკეტი მიზეზია დაელოდოთ სწორ მზადყოფნის მოვლენას და არა განუწყვეტლივ ტრიალს.

შეზღუდეთ ბუფერები. თუ დანიშნულება ნელია, უსასრულო კლიენტური მონაცემების კითხვის გაგრძელება მხოლოდ რიგს გადაიტანს რელეს მეხსიერებაში. უკუწნევა ნიშნავს კითხვის შეჩერებას, როცა შესაბამისი მოლოდინის ბუფერი სავსეა, და განახლებას, როცა ჩაწერა ადგილს ათავისუფლებს.

დასასრულს ერთ მიმართულებაში პოლიტიკა სჭირდება

TCP-ს შეუძლია დახუროს გაგზავნის მიმართულება, სანამ მეორე მიმართულებას ჯერ კიდევ აქვს სასარგებლო მონაცემები. გადაწყვიტეთ, როგორ გადაეცეს ეს მდგომარეობა ბუფერირებული ბაიტების ამოწურვის შემდეგ, და განასხვავეთ მოწესრიგებული დახურვა შეცდომისგან ან ვადისგან.

ამათგან არცერთი არ მოითხოვს, რომ რელემ გაშიფროს ან გაანალიზოს აპლიკაციის დატვირთვა. მას სჭირდება ნაკადის სწორი დამუშავება. მხოლოდ ბუფერის ზომის გაზრდა ვერ შეაკეთებს რელეს, რომელიც არასწორ მხარეს ელოდება ან თვლის, რომ ყოველი წაკითხვა ერთ მთლიან მოთხოვნას შეესაბამება.

დაკავშირებული სტატიები