SOCKS রিলেতে পূর্ণ-দ্বিমুখী প্রবাহ ও ব্যাকপ্রেশার
অনুমানিত প্রতিক্রিয়ার আকারের বদলে স্বতন্ত্র বাইট প্রবাহ, আংশিক I/O, সীমিত বাফার এবং ব্যাকপ্রেশারকে ঘিরে রিলে প্রবাহ ডিজাইন করুন।
SOCKS হ্যান্ডশেক সফল হয়েছে। এখন রিলে ক্লায়েন্ট থেকে পড়ে, গন্তব্যে লেখে, সম্পূর্ণ প্রতিক্রিয়ার জন্য অপেক্ষা করে, এবং তারপরেই আবার ক্লায়েন্ট থেকে পড়ে। এই ক্রম একটি সম্পূর্ণ বৈধ অ্যাপ্লিকেশনকে ডেডলকে ফেলতে পারে।
TCP টানেল স্থাপিত হওয়ার পর SOCKS তার ভেতরের বার্তাগুলো নির্ধারণ করে না। গন্তব্য আগে পাঠাতে পারে। দুই পক্ষই স্বতন্ত্রভাবে পাঠাতে পারে। এক পক্ষ একটি সংক্ষিপ্ত রেকর্ড পাঠিয়ে অন্য পক্ষের উত্তরের জন্য অপেক্ষা করতে পারে।
বাইট পাঠান, অনুমানিত লেনদেন নয়
একটি গ্রহণ কল তার ফ্ল্যাগ ও সকেট অবস্থা অনুযায়ী উপলভ্য বাইট ফেরত দেয়। এটি একটি সাধারণ রিলেকে বলে না যে অ্যাপ্লিকেশনের প্রতিক্রিয়া সম্পূর্ণ। নির্বিচার বড় বাফার পূর্ণ হওয়ার অপেক্ষা করলে পিয়ারকে এগোতে যে ছোট বার্তা দরকার তা পাঠাতে বাধা দিতে পারে।
উভয় দিক পরিচালনা করতে অ্যাপ্লিকেশনের বিদ্যমান সমবর্তিতা মডেল ব্যবহার করুন: ইভেন্ট লুপ, অ্যাসিঙ্ক্রোনাস I/O, বা অন্য সচেতনভাবে বেছে নেওয়া নকশা। গুরুত্বপূর্ণ আচরণ হলো এক দিকে অগ্রগতির জন্য অন্য দিকে উদ্ভাবিত বার্তা-সীমার প্রয়োজন নেই।
দুটি সীমিত অপেক্ষমাণ বাফার রাখুন
ক্লায়েন্ট থেকে পড়া ডেটা এখনও গন্তব্যে পৌঁছানোর অপেক্ষায় থাকতে পারে, আর গন্তব্যের ডেটা ক্লায়েন্টে পৌঁছানোর অপেক্ষায় থাকে। এই অপেক্ষমাণ বাইটগুলো আলাদাভাবে ট্র্যাক করুন।
একটি পাঠানো কল অনুরোধের চেয়ে কম বাইট লিখতে পারে। অলিখিত অংশ ধরে রাখুন; তা ফেলে দেবেন না বা পুরো বাফার আবার চালাবেন না। সাময়িকভাবে লেখা-অযোগ্য সকেট সঠিক প্রস্তুতি ইভেন্টের জন্য অপেক্ষা করার কারণ, নিরন্তর ঘুরে থাকার নয়।
বাফারগুলো সীমিত করুন। গন্তব্য ধীর হলে অসীম ক্লায়েন্ট ডেটা পড়তে থাকা শুধু সারিটিকে রিলের মেমোরিতে সরায়। ব্যাকপ্রেশার মানে সংশ্লিষ্ট বাফার পূর্ণ হলে পড়া থামানো এবং লেখার জায়গা হলে আবার শুরু করা।
এক দিকে সমাপ্তির জন্য নীতি দরকার
TCP একটি পাঠানোর দিক বন্ধ করতে পারে, অথচ অন্য দিকে এখনও উপকারী ডেটা থাকতে পারে। বাফার করা বাইট শেষ হওয়ার পর সেই অবস্থা কীভাবে প্রেরণ করবেন তা ঠিক করুন, এবং সুশৃঙ্খল বন্ধকে ত্রুটি বা সময়সীমা থেকে আলাদা করুন।
এর কোনোটিই রিলেকে অ্যাপ্লিকেশনের পেলোড ডিক্রিপ্ট বা পার্স করতে বলে না। এর সঠিক স্ট্রিম পরিচালনা দরকার। শুধু বাফারের আকার বাড়ালে ভুল দিকের জন্য অপেক্ষা করা বা প্রতিটি পড়াকে একটি সম্পূর্ণ অনুরোধ বলে ধরে নেওয়া রিলে ঠিক হয় না।