कनेक्शन टाइमआउट बनाम सॉकेट टाइमआउट


135

मुझे एक लाइब्रेरी की समस्या है जिसका मैं उपयोग कर रहा हूं। यह पुस्तकालय हो सकता है या हो सकता है कि यह मुझे गलत उपयोग कर रहा हो!

मूल रूप से, जब मैं ऐसा करता हूं (मिलीसेकंड में टाइमआउट)

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

कोई टाइमआउट अपवाद उत्पन्न नहीं होता है और यह ठीक काम करता है, हालांकि, जब मैं निम्नलिखित कार्य करता हूं,

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

मुझे सॉकेट अपवाद मिलता है।

तो, मेरा सवाल यह है कि मैं एक कनेक्शन अपवाद का अनुकरण क्यों नहीं कर सकता हूं? क्या मैं एक सॉकेट और कनेक्शन टाइम-आउट के बीच के अंतर को गलत समझ रहा हूं? पुस्तकालय यहाँ है (आधिकारिक तौर पर अभी तक जारी नहीं किया गया है)।

जवाबों:


227

टीसीपी कनेक्शन शुरू करने पर ही एक कनेक्शन टाइमआउट होता है। यह आमतौर पर होता है अगर रिमोट मशीन जवाब नहीं देती है। इसका मतलब है कि सर्वर बंद हो गया है, आपने गलत आईपी / डीएनएस नाम, गलत पोर्ट का उपयोग किया है या सर्वर से नेटवर्क कनेक्शन डाउन है।

एक सॉकेट टाइमआउट निरंतर आने वाले डेटा प्रवाह की निगरानी के लिए समर्पित है। यदि निर्दिष्ट समयावधि के लिए डेटा प्रवाह बाधित होता है, तो कनेक्शन को रुका हुआ / टूटा हुआ माना जाता है। बेशक यह केवल उन कनेक्शनों के साथ काम करता है जहां डेटा हर समय प्राप्त होता है।

1 को सॉकेट टाइमआउट सेट करने से यह आवश्यक होगा कि प्रत्येक मिलीसेकंड नया डेटा प्राप्त हो (यह मानते हुए कि आप डेटा ब्लॉक को पढ़ते हैं और ब्लॉक काफी बड़ा है)!

यदि केवल आने वाली धारा एक मिलीसेकंड से अधिक के लिए स्टॉल करती है, तो आप एक टाइमआउट में चल रहे हैं।


1
यदि सर्वर डाउन नहीं है लेकिन व्यस्त है तो क्या आपको कभी कनेक्शन टाइमआउट मिल सकता है? या यह एक सॉकेट टाइमआउट होगा?
रॉबर्ट

9
यह निर्भर करता है - यदि सर्वर से अधिक लोड होने से पहले टीसीपी कनेक्शन स्थापित किया गया है, तो आपको सॉकेट अपवाद मिलेगा - अन्यथा आपको एक कनेक्शन अपवाद मिलेगा, यह दर्शाता है कि टीसीपी कनेक्शन स्थापित नहीं किया जा सकता है।
रॉबर्ट

2
विशेष रूप से पुराने मोबाइल नेटवर्क की उच्च विलंबता को ध्यान में रखते हुए कनेक्शन टाइमआउट को कई सेकंड (जैसे 10 या बेहतर 10000 ms) पर सेट किया जाना है। सॉकेट टाइमआउट मैं केवल तभी सेट करूंगा जब आप कई कनेक्शन का उपयोग नहीं करेंगे क्योंकि HTTP अनुरोध के बाद कनेक्शन का फिर से उपयोग कर सकता है।
रॉबर्ट

1
क्या इसका मतलब यह है कि यदि आप एक सॉकेट टाइमआउट (जैसे 1min) सेट करते हैं, तो कनेक्शन को निष्क्रियता के 1 मिनट के बाद मार दिया जाएगा, जहां कोई टाइमआउट सेट नहीं होने पर यह सामान्य रूप से फिर से उपयोग किया जाएगा?
राबर्ट

2
यदि सर्वर बहुत व्यस्त है, तो आपको आवश्यक रूप से कनेक्ट अपवाद नहीं मिलेगा। यह प्लेटफॉर्म-आश्रित है, सर्वर प्लेटफॉर्म पर। एक सॉकेट रीड टाइमआउट कनेक्शन को नहीं मारता है। यह सिर्फ एक सॉकेट टाइमआउट अपवाद का कारण बनता है। क्या कनेक्शन अभी भी प्रयोग करने योग्य है एक निर्णय जो आवेदन करना है। निश्चित रूप से एपीआई के बारे में कुछ भी नहीं है जो कहता है कि आप सॉकेट पर अधिक आई / ओ की कोशिश नहीं कर सकते। यदि आप कई कनेक्शन का उपयोग नहीं करते हैं तो टाइमआउट का उपयोग नहीं करने के बारे में आपका कथन समझ में नहीं आता है। यहाँ बहुत गलत जानकारी है।
लोर्ने

83

एक कनेक्शन टाइमआउट अधिकतम समय है जो प्रोग्राम किसी अन्य प्रक्रिया से कनेक्शन सेटअप करने के लिए प्रतीक्षा करने के लिए तैयार है। आप इस बिंदु पर किसी भी एप्लिकेशन डेटा को प्राप्त या पोस्ट नहीं कर रहे हैं, केवल कनेक्शन स्थापित कर रहे हैं।

एक सॉकेट टाइमआउट अलग-अलग पैकेट की प्रतीक्षा करते समय होता है। यह एक आम गलत धारणा है कि एक सॉकेट टाइमआउट पूर्ण प्रतिक्रिया प्राप्त करने का समयबाह्य है। इसलिए यदि आपके पास 1 सेकंड का सॉकेट टाइमआउट है, और एक प्रतिक्रिया में 3 आईपी पैकेट शामिल हैं, जहां प्रत्येक प्रतिक्रिया पैकेट को पहुंचने में 0.9 सेकंड लगते हैं, कुल 2.7 सेकंड के प्रतिक्रिया समय के लिए, तो कोई टाइमआउट नहीं होगा।


3
ठीक है। 1. तो क्या हम कह सकते हैं कि सॉकेट टाइमआउट केवल उस तस्वीर में आता है जब कोई कनेक्शन पहले से स्थापित है? 2. क्या होगा यदि 3 पैकेट प्राप्त होने के बाद जैसे 5 मिनट के लिए कोई डेटा प्रवाह नहीं है? क्या 3 पैकेट प्राप्त होने के बाद सॉकेट टाइमआउट अपवाद होगा?
सौरभ पाटिल

2
@ सौरभपटील 1. हाँ। पुष्टि के लिए HTTP प्रोटोकॉल का विकिपीडिया का तकनीकी अवलोकन देखें । 2. एक बार संदेश का अंत भेजे जाने के बाद, कोई और डेटा की आवश्यकता नहीं होती है, इसलिए सॉकेट टाइमआउट नहीं होगा। इस उत्तर को विषय पर देखें ।
entpnerd

7
काश, उन्होंने "सॉकेट टाइमआउट" को "निष्क्रिय टाइमआउट" नाम दिया होता।
मनीष माहेश्वरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.