সংযোগকালীন বনাম সকেটটাইমআউট


135

আমি যে লাইব্রেরিটি ব্যবহার করছি তাতে আমার সমস্যা হচ্ছে। এটি গ্রন্থাগার হতে পারে বা এটি আমার ভুল ব্যবহার হতে পারে!

মূলত, যখন আমি এটি করি (মিলি সেকেন্ডে টাইমআউট)

_ignitedHttp.setConnectionTimeout(1);  // v short
_ignitedHttp.setSocketTimeout(60000);  // 60 seconds

কোনও সময়সীমা ব্যতিক্রম উত্পন্ন হয় না এবং এটি ঠিক কাজ করে, যাইহোক, যখন আমি নিম্নলিখিতটি করি,

_ignitedHttp.setConnectionTimeout(60000);  // 60 seconds
_ignitedHttp.setSocketTimeout(1);          // v short

আমি সকেট ব্যতিক্রম পাই।

সুতরাং, আমার প্রশ্ন হল কেন আমি সংযোগ ব্যতিক্রম অনুকরণ করতে পারি না? আমি কি কোনও সকেট এবং সংযোগের সময়সীমার মধ্যে পার্থক্যটি ভুল বুঝছি? পাঠাগারটি এখানে (আনুষ্ঠানিকভাবে প্রকাশিত হয়নি)।

উত্তর:


227

একটি সংযোগ সময়সীমার শুধুমাত্র TCP সংযোগ শুরু উপরে ঘটে। দূরবর্তী মেশিন উত্তর না দিলে সাধারণত এটি ঘটে। এর অর্থ সার্ভারটি বন্ধ হয়ে গেছে, আপনি ভুল আইপি / ডিএনএস নাম ব্যবহার করেছেন, ভুল পোর্ট বা সার্ভারের নেটওয়ার্ক সংযোগ বন্ধ রয়েছে।

একটি সকেট সময়সীমা অবিচ্ছিন্ন আগত ডেটা প্রবাহ নিরীক্ষণের জন্য নিবেদিত। নির্দিষ্ট সময়সীমার জন্য যদি ডেটা প্রবাহকে বাধা দেওয়া হয় তবে সংযোগটি স্থগিত / ভাঙ্গা হিসাবে গণ্য হবে। অবশ্যই এটি কেবল এমন সংযোগগুলির সাথে কাজ করে যেখানে ডেটা সর্বদা প্রাপ্ত হয়।

সকেটের টাইমআউট 1 এ সেট করার জন্য প্রতিটি মিলিসেকেন্ডে নতুন ডেটা পাওয়া দরকার (ধরে নিবেন যে আপনি ডেটা ব্লক অনুযায়ী ডেটা পড়েছেন এবং ব্লকটি যথেষ্ট বড়)!

যদি কেবল আগত স্ট্রিমটি মিলিসেকেন্ডের বেশি স্টল করে তবে আপনি একটি সময়সীমাতে চলেছেন।


1
সার্ভারটি নিচে না থাকলেও ব্যস্ত থাকলে আপনি কি কখনও সংযোগের সময়সীমা পেতে পারেন? অথবা এটি একটি সকেট সময়সীমা হবে?
রবার্ট

9
এটি নির্ভর করে - সার্ভারের ওভারলোড হওয়ার আগে টিসিপি সংযোগটি স্থাপন করা থাকলে আপনি সকেট ব্যতিক্রম পাবেন - অন্যথায় আপনি সংযোগ ব্যতিক্রম পাবেন, এটি নির্দেশ করে যে টিসিপি সংযোগ স্থাপন করা যায়নি।
রবার্ট

2
বিশেষত পুরানো মোবাইল নেটওয়ার্কগুলির উচ্চ বিলম্বিতা বিবেচনা করে সংযোগের সময়সীমাটি কয়েক সেকেন্ডে নির্ধারণ করতে হবে (যেমন 10s বা আরও ভাল 10000 মেসি)। সকেট টাইমআউট আমি কেবল তখনই সেট করে থাকি যদি আপনি বেশ কয়েকটি সংযোগ ব্যবহার না করেন কারণ একটি অনুরোধের পরে HTTP সংযোগটি পুনরায় ব্যবহার করতে পারে।
রবার্ট

1
এর অর্থ কি এই যে আপনি যদি সকেটের সময়সীমা নির্ধারণ করেন (উদাহরণস্বরূপ 1 মিনিট), তবে সংযোগটি 1 মিনিটের নিষ্ক্রিয়তার পরে মারা যাবে, যেখানে সময়সীমা নির্ধারণ না করা থাকলে এটি সাধারণত পুনরায় ব্যবহৃত হবে?
রবার্ট

2
@ রবার্ট সার্ভার খুব ব্যস্ত থাকলে আপনি অগত্যা একটি সংযোগ ব্যতিক্রম পাবেন না। এটি সার্ভার প্ল্যাটফর্মে প্ল্যাটফর্ম নির্ভর। একটি সকেট পড়ার সময়সীমা সংযোগটি হত্যা করে না। এটি কেবল একটি সকেটটাইমআউট এক্সসেপশন ঘটায়। সংযোগটি এখনও ব্যবহারযোগ্য কিনা তা প্রয়োগের সিদ্ধান্ত গ্রহণের সিদ্ধান্ত। এপিআই সম্পর্কে অবশ্যই কিছু নেই যা বলে যে আপনি সকেটে আরও আই / ও চেষ্টা করতে পারবেন না। টাইমআউটগুলি ব্যবহার না করার বিষয়ে আপনার বিবৃতিটি যদি আপনি একাধিক সংযোগ ব্যবহার করেন তবে তা বোঝা শুরু হয় না। এখানে খুব বেশি ভুল তথ্য রয়েছে।
লার্নের মারকুইস

83

একটি সংযোগ সময় শেষ সময় সর্বোচ্চ পরিমাণ যে প্রোগ্রাম সেটআপ অন্য প্রক্রিয়া একটি সংযোগ অপেক্ষা করতে ইচ্ছুক হয়। আপনি এই মুহুর্তে কোনও অ্যাপ্লিকেশন ডেটা পাচ্ছেন না বা পোস্ট করছেন না, কেবল সংযোগ স্থাপন করুন, নিজেই।

স্বতন্ত্র প্যাকেটের জন্য অপেক্ষা করার সময় একটি সকেট টাইমআউট হয়। এটি একটি সাধারণ ভুল ধারণা যে সকেটের সময়সীমা সম্পূর্ণ প্রতিক্রিয়া পাওয়ার সময়সীমা হয়। সুতরাং আপনার যদি 1 সেকেন্ডের সকেট টাইমআউট হয় এবং 3 টি আইপি প্যাকেট সমন্বিত একটি প্রতিক্রিয়া থাকে যেখানে প্রতিটি প্রতিক্রিয়া প্যাকেটটি আসতে 2.9 সেকেন্ডের মোট প্রতিক্রিয়া সময়ের জন্য 0.9 সেকেন্ড সময় নেয় তবে কোনও সময়সীমা শেষ হবে না।


3
ঠিক আছে. ১. সুতরাং আমরা কি বলতে পারি যে সকেটটাইমআউট কেবল তখনই ছবিতে আসে যখন কোনও সংযোগটি ইতিমধ্যে স্থাপন করা আছে? ২. 3 প্যাকেট পাওয়ার পরে 5 মিনিটের মতো বলার মতো কোনও ডাটা প্রবাহ না থাকলে কী হবে? তৃতীয় প্যাকেট পাওয়ার পরে কি কোনও সকেটটাইমআউট ব্যতিক্রম হবে?
সৌরভ পাতিল

2
@ সৌরভপতিল 1. হ্যাঁ। নিশ্চিতকরণের জন্য HTTP প্রোটোকলের উইকিপিডিয়াটির প্রযুক্তিগত ওভারভিউ দেখুন । ২. বার্তা শেষ হওয়ার পরে, আর কোনও ডেটার প্রয়োজন হয় না, সুতরাং সকেটের সময়সীমাটি ঘটে না। বিষয়টিতে এই উত্তরটি দেখুন ।
এনটনার্ড

7
আমার ইচ্ছা তারা "সকেট টাইমআউট" এর নাম দিয়েছিল "নিষ্ক্রিয় সময়সীমা"।
মণীশ মহেশ্বরী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.