2011-09-09 11 views
86

मुझे लाइब्रेरी के साथ कोई समस्या है जिसका उपयोग मैं कर रहा हूं, यह पुस्तकालय हो सकता है या यह गलत हो सकता है!कनेक्शनटाइमआउट बनाम सॉकेटटाइमआउट

असल में जब मैं (मिलीसेकेंड में समय-समाप्त) ऐसा करने

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

कोई समय समाप्ति अपवाद काम करता है ठीक से उत्पन्न होता है, फिर भी, जब मैं इस कार्य करें:

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

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

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

उत्तर

159

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

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

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

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

+1

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

+7

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

+0

मोबाइल उपकरणों के लिए सॉकेट टाइमआउट और कनेक्शन टाइमआउट के सामान्य मूल्य क्या हैं? क्या आमतौर पर दूसरे की तुलना में बड़ा होता है? – Robert

42

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

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

+0

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

+0

@ सौरभपतिल 1. हां। पुष्टि के लिए [HTTP प्रोटोकॉल का विकिपीडिया का तकनीकी अवलोकन] देखें (https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Technical_overview)। 2. संदेश समाप्त होने के बाद, कोई और डेटा आवश्यक नहीं है, इसलिए सॉकेट टाइमआउट नहीं होगा। विषय पर [यह उत्तर] देखें (https://stackoverflow.com/a/4824738/4851565)। – entpnerd