Plendupleksa fluo kaj malantaŭpremo en SOCKS-relajso
Projektu la relajsan fluon ĉirkaŭ sendependaj bajtaj fluoj, parta enigo-eligo, limigitaj bufroj kaj malantaŭpremo anstataŭ divenitaj respondgrandoj.
La SOCKS-manpremo sukcesis. Nun la relajso legas de la kliento, skribas al la celo, atendas plenan respondon kaj nur poste legas denove de la kliento. Tiu sinsekvo povas bloki tute validan aplikaĵon.
Post kiam la TCP-tunelo ekzistas, SOCKS ne difinas la mesaĝojn interne. La celo povas sendi unue. Ambaŭ flankoj povas sendi sendepende. Unu flanko povas sendi mallongan rikordon kaj poste atendi la respondon de la alia.
Transsendu bajtojn, ne divenitajn transakciojn
Akcepta voko redonas la haveblajn bajtojn laŭ siaj flagoj kaj la stata de la ingo. Ĝi ne diras al ĝenerala relajso, ke la respondo de la aplikaĵo estas kompleta. Atendi, ke arbitre granda bufro pleniĝu, povas malebligi transsendi la malgrandan mesaĝon, kiun la kunulo bezonas por daŭrigi.
Uzu la ekzistantan konkurecan modelon de la aplikaĵo por servi ambaŭ direktojn: okaza buklo, nesinkrona enigo-eligo aŭ alia konscie elektita dezajno. La grava konduto estas, ke progreso en unu direkto ne postulas elpensitan mesaĝlimon en la alia.
Tenu du limigitajn atendantajn bufrojn
Datumoj legitaj de la kliento eble ankoraŭ atendas atingi la celon, dum datumoj de la celo atendas atingi la klienton. Spuru tiujn atendantajn bajtojn aparte.
Sendo povas skribi malpli da bajtoj ol petite. Konservu la neskribitan parton; ne forĵetu ĝin kaj ne reludu la tutan bufron. Provizore neskribebla ingo estas kaŭzo atendi la ĝustan pretecan okazon, ne turniĝi senĉese.
Limigu la bufrojn. Se la celo estas malrapida, daŭra legado de senlimaj klientaj datumoj nur translokas la atendovicon en la memoron de la relajso. Malantaŭpremo signifas paŭzi legadojn kiam la responda bufro plenas kaj rekomenci kiam skriboj liberigas spacon.
Fino en unu direkto bezonas politikon
TCP povas fermi sendodirekton dum la alia direkto ankoraŭ havas utilajn datumojn. Decidu, kiel disvastigi tiun kondiĉon post kiam la bufritaj bajtoj elfluas, kaj distingi ordan fermon disde eraro aŭ limdato.
Nenio el tio postulas, ke la relajso malĉifru aŭ analizu la utilan ŝarĝon de la aplikaĵo. Ĝi bezonas ĝustan fluotraktadon. Pliigi nur la bufran grandecon ne povas ripari relajson, kiu atendas la malĝustan flankon aŭ supozas, ke ĉiu legado respondas al unu tuta peto.