SOCKS rukovanje je uspjelo. Sada relej čita od klijenta, piše na odredište, čeka potpun odgovor i tek onda ponovno čita od klijenta. Taj slijed može zaključati posve ispravnu aplikaciju.

Nakon uspostavljanja TCP tunela, SOCKS ne definira poruke unutar njega. Odredište može poslati prvo. Obje strane mogu slati neovisno. Jedna strana može poslati kratak zapis i zatim čekati odgovor druge.

Prenosite bajtove, ne pretpostavljene transakcije

Poziv primanja vraća dostupne bajtove prema svojim zastavicama i stanju socketa. On ne govori općem releju da je odgovor aplikacije potpun. Čekanje da se proizvoljno velik međuspremnik napuni može spriječiti prosljeđivanje male poruke koja je partneru potrebna za nastavak.

Koristite postojeći model konkurentnosti aplikacije za posluživanje obaju smjerova: petlju događaja, asinkroni I/O ili drugi namjerno odabran dizajn. Važno je ponašanje da napredak u jednom smjeru ne zahtijeva izmišljenu granicu poruke u drugom.

Držite dva ograničena međuspremnika na čekanju

Podaci pročitani od klijenta možda još čekaju da stignu do odredišta, dok podaci s odredišta čekaju da stignu do klijenta. Pratite te bajtove na čekanju odvojeno.

Slanje može zapisati manje bajtova od zatraženog. Zadržite nezapisani dio; ne odbacujte ga i ne reproducirajte cijeli međuspremnik. Privremeno nezapisiv socket razlog je za čekanje ispravnog događaja spremnosti, a ne za neprestano vrtnje.

Ograničite međuspremnike. Ako je odredište sporo, nastavak čitanja neograničenih klijentskih podataka samo premješta red u memoriju releja. Povratni pritisak znači pauziranje čitanja kada je odgovarajući međuspremnik pun i nastavljanje kada pisanje oslobodi prostor.

Kraj u jednom smjeru zahtijeva politiku

TCP može zatvoriti smjer slanja dok drugi smjer još ima korisne podatke. Odlučite kako prenijeti to stanje nakon što se međuspremljeni bajtovi isprazne, i razlikujte uredno zatvaranje od pogreške ili roka.

Ništa od ovoga ne zahtijeva da relej dešifrira ili raščlanjuje korisni teret aplikacije. Potrebno mu je ispravno rukovanje tokom. Povećanje samo veličine međuspremnika ne može popraviti relej koji čeka pogrešnu stranu ili pretpostavlja da svako čitanje odgovara jednom cijelom zahtjevu.

Povezani članci