সকেটের সংযোগ এবং পাঠের সময়সীমার মধ্যে পার্থক্য কী?


180

3 টি প্রশ্ন:

  1. সকেটের সংযোগ এবং পাঠের সময়সীমার মধ্যে পার্থক্য কী ?

  2. কী সংযোগ গড় "অনন্ত" এ সময়সীমার সেট করতে চান? কোন পরিস্থিতিতে এটি কোনও অনন্য লুপে থাকতে পারে? এবং অনন্ত-লুপটি মারা যায় এমন কী ট্রিগার করতে পারে?

  3. কী পঠিত "অনন্ত" এ সময়সীমার সেট মানে? কোন পরিস্থিতিতে এটি কোনও অনন্য লুপে থাকতে পারে? এবং অনন্ত-লুপটি মারা যায় এমন কী ট্রিগার করতে পারে?

উত্তর:


227

1) সকেটের সংযোগ এবং পাঠের সময়সীমার মধ্যে পার্থক্য কী?

সংযোগের সময়সীমাটি প্রাথমিক সংযোগ তৈরির সময়সীমা; অর্থাত্ টিসিপি সংযোগ হ্যান্ডশেক সম্পূর্ণ completing পড়ার সময়সীমা হ'ল ডেটা 1 পড়ার অপেক্ষার সময়সীমা । বিশেষত, যদি সার্ভারটি শেষ বাইটের পরে <টাইমআউট> সেকেন্ড পরে কোনও বাইট প্রেরণ করতে ব্যর্থ হয় তবে একটি পঠনের সময়সীমা ত্রুটি উত্থাপিত হবে।

2) সংযোগের সময়সীমা "অনন্ত" সেট করার অর্থ কী? কোন পরিস্থিতিতে এটি কোনও অনন্য লুপে থাকতে পারে? এবং অনন্ত-লুপটি মারা যায় এমন কী ট্রিগার করতে পারে?

এর অর্থ এই যে সংযোগের প্রচেষ্টাটি সম্ভবত চিরতরে ব্লক করতে পারে। কোনও অসীম লুপ নেই, তবে সংযোগের প্রচেষ্টা সকেট বন্ধ করে অন্য থ্রেড দ্বারা অবরোধ মুক্ত করা যেতে পারে। (একটি Thread.interrupt()কলও কৌশলটি করতে পারে ... নিশ্চিত নয়))

3) "অনন্ত" সেট করার পাঠ্য টাইমআউট বলতে কী বোঝায়? কোন পরিস্থিতিতে এটি অসীম লুপে থাকতে পারে? কি অসীম লুপ শেষ করতে ট্রিগার করতে পারে?

এর অর্থ readসকেট স্ট্রিমে কল চিরকালের জন্য অবরুদ্ধ হতে পারে। আবার কোন অসীম লুপ, কিন্তু readএকটি দ্বারা অবরুদ্ধ থাকা হতে পারে Thread.interrupt()কল, সকেট বন্ধ, এবং (অবশ্যই) অন্য প্রান্তে ডেটা প্রেরণ বা সংযোগ বন্ধ।


1 - এটি নয় ... একজন কমেন্টার মনে করেছিল ... সকেট কতক্ষণ উন্মুক্ত বা নিষ্ক্রিয় থাকতে পারে তার টাইমআউট।


8

এগুলি টিসিপি সংযোগ স্থাপনের জন্য জেভিএম দ্বারা প্রয়োগ করা এবং সকেট থেকে ডেটা পড়ার অপেক্ষায় টাইমআউট মান।

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

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

টিসিপি টাইমআউট হ্যান্ডেল করার একমাত্র নিরাপদ পন্থা হ'ল সংযোগ কোডটি অন্য কোনও থ্রেডে চালানো এবং থ্রেডটি খুব বেশি সময় নিলে বাধা দেয়।


"মানটি যদি অনন্তরে সেট করা থাকে তবে আপনি চিরকাল অপেক্ষা করবেন না।" যতক্ষণ না এটি "অনন্ত" এর অর্থ নিয়ে আলোচনার বিষয়ে না থাকে, ততক্ষণ অবশ্যই এটি ঘটতে পারে যে আপনি খুব দীর্ঘ অপেক্ষা করেছিলেন। আমাদের এখানে একটি মামলা হয়েছে, যেখানে একটি HttpURLConnection.getResponseCode()অ্যাপ্রিক্সের জন্য ঝুলছিল। আমরা প্রক্রিয়াটি আরম্ভ না করা পর্যন্ত এক সপ্তাহ। জেভিএম সাইডে স্পষ্টতই কোনও টাইমআউট সেট হয়নি এবং লিনাক্স ওএসের পাশের সময়সীমাও ছিল না।
টম ফিঙ্ক

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

1
পছন্দ করেছেন আপনি ইনপুট জন্য সকেট বন্ধ করতে পারেন। এটি অবরুদ্ধ পড়াটির প্রবাহের শেষের মুখোমুখি হবে।
লার্নের মারকুইস

@ আয়জিটসোম: আমাকে একটি থ্রেড ব্যবহার করে এটি প্রয়োগ করতে হয়েছিল যা একটি উন্মুক্ত HTTP ইউআরএল সংযোগের রেফারেন্স ধারণ করে holds যখন থ্রেডটি সংযোগ বন্ধ করে, অন্য থ্রেডটি "java.net.SakerException: সকেট বন্ধ" ছোঁড়ে। আমাকে জাজ করার জন্য বাগ JDK-8075484 ধন্যবাদ!
fmcato

@comeGetSome অবশ্যই Socket.shutdownInput()আপনার হাত ধরে না রেখে ফোন করতে পারেন ? এনবি এই সময়সীমাগুলি টিভিপি দ্বারা প্রয়োগ করা হয়, জেভিএম দ্বারা নয়।
লার্নের মারকুইস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.