SOCKS-kättely onnistui. Nyt välitys lukee asiakkaalta, kirjoittaa kohteeseen, odottaa täydellistä vastausta ja lukee vasta sitten taas asiakkaalta. Tämä järjestys voi lukita täysin kelvollisen sovelluksen.

Kun TCP-tunneli on muodostettu, SOCKS ei määrittele sen sisällä olevia viestejä. Kohde voi lähettää ensin. Molemmat osapuolet voivat lähettää itsenäisesti. Toinen osapuoli voi lähettää lyhyen tietueen ja odottaa sitten toisen vastausta.

Välitä tavuja, älä arvattuja tapahtumia

Vastaanottokutsu palauttaa saatavilla olevat tavut lippujensa ja pistokkeen tilan mukaan. Se ei kerro yleiselle välitykselle, että sovelluksen vastaus on täydellinen. Mielivaltaisen suuren puskurin täyttymisen odottaminen voi estää sen pienen viestin välittämisen, jota vastapuoli tarvitsee jatkaakseen.

Käytä sovelluksen olemassa olevaa rinnakkaisuusmallia molempien suuntien palvelemiseen: tapahtumasilmukka, asynkroninen I/O tai muu tietoisesti valittu ratkaisu. Tärkeää on, että edistyminen yhdessä suunnassa ei vaadi keksittyä viestirajaa toisessa.

Pidä kaksi rajattua odottavaa puskuria

Asiakkaalta luettu data voi yhä odottaa pääsyä kohteeseen, kun taas kohteen data odottaa pääsyä asiakkaalle. Seuraa näitä odottavia tavuja erikseen.

Lähetys voi kirjoittaa vähemmän tavuja kuin pyydettiin. Säilytä kirjoittamaton osa; älä hylkää sitä äläkä toista koko puskuria. Tilapäisesti kirjoituskelvoton pistoke on syy odottaa oikeaa valmius­tapahtumaa, ei pyöriä jatkuvasti.

Rajaa puskurit. Jos kohde on hidas, rajattoman asiakasdatan lukemisen jatkaminen siirtää jonon vain välityksen muistiin. Vastapaine tarkoittaa lukemisen keskeyttämistä, kun vastaava odottava puskuri on täynnä, ja jatkamista, kun kirjoitukset vapauttavat tilaa.

Loppu yhdessä suunnassa vaatii käytännön

TCP voi sulkea lähetyssuunnan, vaikka toisessa suunnassa on yhä hyödyllistä dataa. Päätä, miten tämä tila välitetään puskuroitujen tavujen tyhjennyttyä, ja erota hallittu sulkeminen virheestä tai määräajasta.

Mikään tästä ei vaadi välitystä purkamaan tai jäsentämään sovelluksen hyötykuormaa. Se tarvitsee oikeaa virrankäsittelyä. Pelkkä puskurin koon kasvattaminen ei korjaa välitystä, joka odottaa väärää puolta tai olettaa jokaisen luvun vastaavan yhtä kokonaista pyyntöä.

Aiheeseen liittyvät artikkelit