SOCKS кол алышуусу ийгиликтүү өттү. Эми реле кардардан окуйт, багытка жазат, толук жоопту күтөт жана ошондон кийин гана кардардан кайра окуйт. Бул ырааттуулук толук туура колдонмону туңгуюкка алып келиши мүмкүн.

TCP туннели орнотулгандан кийин SOCKS анын ичиндеги билдирүүлөрдү аныктабайт. Багыт биринчи жибере алат. Эки тарап тең көз карандысыз жибере алат. Бир тарап кыска жазуу жиберип, анан экинчи тараптын жообун күтүшү мүмкүн.

Байттарды өткөрүңүз, болжолдонгон операцияларды эмес

Кабыл алуу чакыруусу өзүнүн желектерине жана сокеттин абалына ылайык жеткиликтүү байттарды кайтарат. Ал жалпы релеге колдонмонун жообу толук экенин айтпайт. Кокус чоң буфердин толушун күтүү өнөктөшкө улантуу үчүн керектүү кичине билдирүүнү жиберүүгө тоскоол болушу мүмкүн.

Эки багытка тең тейлөө үчүн колдонмонун бар болгон параллелдүүлүк моделинин пайдаланыңыз: окуялар циклы, асинхрондук I/O же атайын тандалган башка долбоор. Маанилүүсү — бир багыттагы илгерилөө экинчисинде ойлоп табылган билдирүү чегин талап кылбайт.

Эки чектелген күтүү буферин кармаңыз

Кардардан окулган маалыматтар дагы эле багытка жетүүнү күтүп жаткан болушу мүмкүн, ал эми багыттан келген маалыматтар кардарга жетүүнү күтөт. Ошол күтүү байттарын өзүнчө көзөмөлдөңүз.

Жиберүү талап кылынгандан аз байт жазышы мүмкүн. Жазылбаган бөлүгүн сактаңыз; аны ыргытпаңыз жана бүт буферди кайра ойнотпоңуз. Убактылуу жазылбаган сокет туура даярдык окуясын күтүүгө себеп, тынымсыз айланууга эмес.

Буферлерди чектеңиз. Эгер багыт жай болсо, чексиз кардар маалыматтарын окууну улантуу кезекти реленин эстутумуна гана жылдырат. Артка басым — тиешелүү күтүү буфери толгондо окууну токтотуп, жазуу орун бошоткондо кайра баштоо.

Бир багыттагы аяктоо саясатты талап кылат

TCP жиберүү багытын жабышы мүмкүн, ал эми экинчи багытта дагы пайдалуу маалыматтар бар. Буферленген байттар түгөнгөндөн кийин бул абалды кантип өткөрүүнү чечиңиз жана тартиптүү жабууну катадан же мөөнөттөн айырмалаңыз.

Мунун эч бири реледен колдонмонун пайдалуу жүгүн чечмелөөнү же талдоону талап кылбайт. Ага агымды туура иштетүү керек. Болгону буфердин өлчөмүн чоңойтуу туура эмес тарапты күткөн же ар бир окууну бир толук сурамга дал келет деп эсептеген релени оңдой албайт.

Тектеш макалалар