2012-09-03 14 views
6

यह प्रश्न टीसीपी/आईपी प्रोटोकॉल के आसपास सामान्य अवधारणाओं से संबंधित है, जिसके लिए पहले से ही अच्छे उत्तर हैं, लेकिन मैं कुछ अंतर्दृष्टि प्राप्त करने की उम्मीद कर रहा हूं node.js http/net पुस्तकालयों की विशिष्टताओं।Node.js HTTP/नेट - एक कनेक्शन और एक अनुरोध के बीच अंतर

नोड http सर्वर उदाहरण कॉलबैक घटनाओं, 'अनुरोध' घटना, और 'कनेक्शन', घटना के दो प्रकार के लिए पंजीकृत होने के लिए अनुमति देता है। इनमें से बाद में शुद्ध पुस्तकालय से प्राप्त होती है, एक क्षेत्र '_connections' है, जो समवर्ती कनेक्शन सर्वर वर्तमान में है की संख्या की गणना के साथ।

अब, मुझे ऐसा लगता है कि चूंकि http एक स्टेटलेस प्रोटोकॉल है, अनुरोध और कनेक्शन घटनाओं के बीच पत्राचार के लिए 1-1 होना चाहिए - लेकिन ऐसा नहीं है। मेरे डीबगर में एक सरल 'हैलो-वर्ल्ड' सर्वर के माध्यम से कदम उठाने पर, मैंने देखा कि अनुरोध घटनाओं की संख्या कनेक्शन घटनाओं से अधिक है। मैं भी है कि देखा था, कोई कॉल सर्वर से किए जा रहे थे, तब भी जब (और इस प्रक्रिया में कोई रुका हुआ था), .connections क्षेत्र को शून्य कभी नहीं होगा। क्यों अनुरोधों की संख्या कनेक्शन की संख्या के बराबर होता है, और यही कारण है कि सर्वर एक कनेक्शन अंतिम कॉल के बाद अच्छी तरह से खोलने response.end रखने होगा() (जब प्रतिक्रिया बफर प्लावित होने वाली है और कनेक्शन समाप्त हो गया?)।

इसके अलावा, एक HTTP सर्वर के लिए समवर्ती कनेक्शन की संख्या (जो जीवित रहने के साथ कुछ भी नहीं करती) कभी भी 1 से अधिक हो सकती है? मूल रूप से सॉकेट पर कतारबद्ध होने का अनुरोध नहीं करते हैं और एक-एक करके संसाधित होते हैं? मैं समझता हूं कि नोड असीमित है, लेकिन मैंने यह भी सोचा कि यह एक-थ्रेडेड तरीके से व्यवहार करता है।

अग्रिम धन्यवाद!

+2

क्या आप वाकई जीवित-रखें सक्षम नहीं है रहे हैं? यह डिफ़ॉल्ट रूप से Node.js. में है यह भी याद रखें, जबकि अनुरोध एक-एक करके संसाधित होते हैं, असीमित घटनाओं को इंटरवेव किया जा सकता है, जिसका अर्थ है कि एक पूर्ण अनुरोध-प्रतिक्रिया चक्र 100% तुल्यकालिक नहीं हो सकता है। –

उत्तर

7

HTTP स्टेटलेस है, लेकिन यह TCP से अधिक चलाता है, जो स्टेटलेस नहीं है।

HTTP request headerConnection: keep-alive सेट करके, अंतर्निहित टीसीपी कनेक्शन को खोलने के लिए यह संभव है (और अक्सर उपयोग किया जाता है)। This is a performance optimization, के बाद से TCP कनेक्शन की स्थापना की और बार-बार नीचे आंसू महंगा हो सकता है।

+0

उत्तर के लिए धन्यवाद - यह शायद बताता है कि मैं क्या देख रहा था। –