Aliran Dupleks Penuh dan Tekanan Balik dalam Geganti SOCKS
Reka aliran geganti berdasarkan aliran bait bebas, I/O separa, penimbal terbatas dan tekanan balik, bukan saiz respons yang diagak.
Jabat tangan SOCKS berjaya. Kini geganti membaca daripada klien, menulis ke destinasi, menunggu respons penuh, dan hanya kemudian membaca klien semula. Urutan itu boleh menyekat aplikasi yang sah sepenuhnya.
Setelah terowong TCP diwujudkan, SOCKS tidak mentakrifkan mesej di dalamnya. Destinasi mungkin menghantar dahulu. Kedua-dua pihak mungkin menghantar secara bebas. Satu pihak mungkin menghantar rekod pendek dan kemudian menunggu jawapan pihak lain.
Geganti bait, bukan transaksi yang diagak
Panggilan terima mengembalikan bait tersedia mengikut bendera dan keadaan soketnya. Ia tidak memberitahu geganti generik bahawa respons aplikasi sudah lengkap. Menunggu penimbal besar sewenang-wenangnya dipenuhi boleh menghalang penghantaran mesej kecil yang diperlukan rakan sebaya untuk meneruskan.
Gunakan model keselarian sedia ada aplikasi untuk melayani kedua-dua arah: gelung peristiwa, I/O tak segerak, atau reka bentuk lain yang dipilih secara sengaja. Tingkah laku penting ialah kemajuan dalam satu arah tidak memerlukan sempadan mesej yang direka dalam arah yang lain.
Simpan dua penimbal tertunda terbatas
Data yang dibaca daripada klien mungkin masih menunggu untuk sampai ke destinasi, manakala data daripada destinasi menunggu untuk sampai ke klien. Jejaki bait tertunda itu secara berasingan.
Penghantaran boleh menulis lebih sedikit bait daripada yang diminta. Simpan bahagian yang belum ditulis; jangan buangkannya atau main semula seluruh penimbal. Soket yang sementara tidak boleh ditulis ialah sebab untuk menunggu peristiwa kesediaan yang betul, bukan berpusing berterusan.
Hadkan penimbal. Jika destinasi perlahan, terus membaca data klien tanpa had hanya memindahkan baris gilir ke dalam memori geganti. Tekanan balik bermaksud menjeda bacaan apabila penimbal tertunda yang sepadan penuh dan menyambung semula apabila penulisan memberi ruang.
Pengakhiran dalam satu arah memerlukan dasar
TCP boleh menutup arah penghantaran sementara arah lain masih mempunyai data berguna. Tentukan cara menyebarkan keadaan itu selepas bait yang ditimbal habis, dan bezakan penutupan teratur daripada ralat atau had masa.
Tiada satu pun daripada ini memerlukan geganti menyahsulit atau menghuraikan muatan aplikasi. Ia memerlukan pengendalian aliran yang betul. Menambah saiz penimbal sahaja tidak boleh membaiki geganti yang menunggu pihak yang salah atau menganggap setiap bacaan sepadan dengan satu permintaan penuh.