Volduplekse vloei en terugdruk in 'n SOCKS-relais
Ontwerp relaisvloei rondom onafhanklike grepe, gedeeltelike I/O, begrensde buffers en terugdruk eerder as gerate antwoordgroottes.
Die SOCKS-handdruk het geslaag. Nou lees die relais van die kliënt, skryf na die bestemming, wag vir 'n volledige antwoord en lees eers daarna weer van die kliënt. Dié volgorde kan 'n heeltemal geldige toepassing doodslaan.
Sodra die TCP-tonnel gevestig is, definieer SOCKS nie die boodskappe daarbinne nie. Die bestemming kan eerste stuur. Beide kante kan onafhanklik stuur. Een kant kan 'n kort rekord stuur en dan op die ander se antwoord wag.
Herlei grepe, nie geraakte transaksies nie
'n Ontvangsoproep gee die beskikbare grepe volgens sy vlae en die sokkettoestand terug. Dit sê nie vir 'n generiese relais dat 'n toepassingsantwoord volledig is nie. Om te wag tot 'n willekeurige groot buffer vol is, kan verhoed dat die klein boodskap wat die eweknie nodig het om voort te gaan, deurgestuur word.
Gebruik die toepassing se bestaande konkurreentheidsmodel om beide rigtings te bedien: 'n gebeurtenislus, asinchrone I/O of 'n ander doelbewus gekose ontwerp. Die belangrike gedrag is dat vordering in een rigting nie 'n uitgedagte boodskapgrens in die ander vereis nie.
Hou twee begrensde hangende buffers
Data wat van die kliënt gelees is, wag moontlik nog om die bestemming te bereik, terwyl data van die bestemming wag om die kliënt te bereik. Volg dié hangende grepe afsonderlik.
'n Stuur kan minder grepe skryf as wat gevra is. Behou die ongeskrewe deel; moenie dit laat val of die hele buffer herspeel nie. 'n Tydelik onskryfbare sokket is rede om op die korrekte gereedheidsgebeurtenis te wag, nie om onophoudelik te draai nie.
Begrens die buffers. As die bestemming stadig is, skuif die aanhou lees van onbeperkte kliëntdata bloot die tou na die relais se geheue. Terugdruk beteken om lesings te pouseer wanneer die ooreenstemmende hangende buffer vol is en te hervat wanneer skryf ruimte maak.
'n Einde in een rigting vra 'n beleid
TCP kan 'n stuurrigting sluit terwyl die ander rigting nog nuttige data het. Besluit hoe om daardie toestand oor te dra nadat die gebufferde grepe uitgevloei het, en onderskei ordelike sluiting van 'n fout of 'n spertyd.
Niksin hiervan vereis dat die relais die toepassing se nutsvrag ontsyfer of ontleed nie. Dit het korrekte stroomhantering nodig. Om net die buffer se grootte te vergroot, kan nie 'n relais herstel wat vir die verkeerde kant wag of aanvaar dat elke lesing een hele versoek verteenwoordig nie.