2010-09-17 10 views
8

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

मैंने पढ़ा है कि आप क्लाइंट को पहले बंद करने का प्रयास करते हैं और प्राप्त करते हैं, ताकि सभी टाइम_डब्ल्यूआईटी सर्वर पर केंद्रित होने के बजाय सभी ग्राहकों के बीच फैल जाए।

यह कैसे किया जाता है? किसी बिंदु पर सर्वर को बंद/बंद करने की आवश्यकता होती है।

उत्तर

9

सहकर्मी जो सक्रिय बंद करता है वह वह है जो TIME_WAIT में जाता है। इसलिए जब तक ग्राहक कनेक्शन बंद कर देता है तब तक ग्राहक को TIME_WAIT मिल जाता है और सर्वर नहीं। मैं इस सब कुछ थोड़ा और विस्तार से in this blog posting में जाता हूं।

+0

तो क्या सर्वर बस घूमता है और ग्राहक को बंद करने की प्रतीक्षा करता है? मुझे लगता है कि किसी बिंदु पर यह समय समाप्त करना और कनेक्शन को बंद करना चाहता है। – DougN

+0

जो मुझे एक और प्रश्न के बारे में सोचता है :) क्या आपको लगता है कि एक वास्तविक वेब सर्वर (आईआईएस/अपाचे?) बस 5 (?) दूसरी टाइमआउट के साथ सॉकेट पर चयन करें - यह पता लगाना कि क्लाइंट के लिए बहुत समय होना चाहिए डिस्कनेक्ट करें (और त्रुटि सॉकेट के साथ वापसी का चयन करें)? – DougN

+3

यदि आप इसे बंद करने के बजाय कनेक्शन रीसेट करते हैं तो आप TIME_WAIT में भी समाप्त नहीं होते हैं। इसलिए यदि आप निष्क्रिय कनेक्शन के लिए टाइमआउट जोड़ना चाहते हैं तो आप उन्हें पहले अदरक बंद करके और फिर बंद करने के द्वारा बंद कर देंगे। यह एक आरएसटी भेज देगा और आप TIME_WAIT में समाप्त नहीं होंगे। –

संबंधित मुद्दे