ओएस एक्स 10.8.3सॉकेट बंद हो प्रतीत नहीं होते हैं का उपयोग करते समय Node.js http.get
नोड 0.10.0
मैं के अनुरोध करने की 'http' मॉड्यूल का उपयोग कर रहा फेसबुक ग्राफ एपीआई।
http.get(options,
function(res) {
...some stuff...
DONE(RESULT); //DONE is a callback function
}).on('error', function(e) {
...some error handling...
});
क्या मैं देख सकते हैं कि मैं केवल के रूप में कई अनुरोधों क्या कर सकते हैं:
var options = {host: 'graph.facebook.com',
port: 80,
path: '/' + fb_id + '/picture'}; //fb_id is a Facebook user identifier
मेरे कोड इस तरह दिखता है:
विकल्प यहां दिए है कि मैं 'http.get' को पारित कर रहे हैं http.globalAgent.maxSockets के मान के रूप में। एक बार जब मैं उन अनुरोधों तक पहुंच जाता हूं, तो http.get को अगली कॉल कभी नहीं (स्पष्ट रूप से) जोड़ती है। मैंने सत्यापित किया है कि मुझे अनुरोधों पर त्रुटियां नहीं मिल रही हैं।
यह के रूप में यद्यपि सॉकेट बंद नहीं किया जा रहा है के बाद जवाब में आता है।
वहाँ कुछ मैं सुनिश्चित करना है कि सॉकेट बंद कर दिया है प्रतिक्रिया हैंडलर के हिस्से के रूप क्या करने की जरूरत है?
क्या ये सॉकेट डिफ़ॉल्ट रखरखाव व्यवहार के कारण बंद नहीं हो रहे हैं?
मुझे इसे डीबग करने के लिए कैसे आगे बढ़ना चाहिए?
मैंने इसे दस्तावेज में देखा लेकिन इसे भ्रमित कर दिया: "यदि सॉकेट पर कोई लंबित HTTP अनुरोध इंतजार नहीं कर रहा है तो सॉकेट बंद हो गया है।इसका मतलब यह है कि लोड के दौरान नोड के पूल को जीवित रहने का लाभ होता है लेकिन अभी भी डेवलपर्स को रख-रखाव के जरिए HTTP क्लाइंट को मैन्युअल रूप से बंद करने की आवश्यकता नहीं होती है। " मुझे समझ में नहीं आता कि क्यों पूल, पहले से ही खुले कनेक्शन नहीं हैं बाद के अनुरोधों के लिए उपयोग किया जाता है। मैं एजेंट को कोशिश करूंगा: झूठी, और इससे अच्छी चीजों की उम्मीद करें। –
मुझे लगता है कि 'http' मॉड्यूल पूल में कोई सॉकेट उपलब्ध नहीं है, जिसके लिए कोई अनुरोध नहीं है।' 'maxSockets' पहुंचा है और उन सभी अनुरोधों को अभी भी लंबित है, किसी भी बाद के अनुरोधों को पूल से मुफ्त सॉकेट नहीं मिल सकता है और केवल गिरा दिया जाएगा। – robertklep
मुझे एहसास हुआ कि मेरा आवेदन आर्किटेक्चर मेरी समस्या में योगदान दे रहा था क्योंकि मुझे फिर से आवश्यकता थी प्रत्येक अनुरोध से पहले 'http' मॉड्यूल, जिसका अर्थ है कि प्रत्येक http संदर्भ स्टैंडअलोन था। मैंने इसे बदलने का प्रयास किया ताकि एचटी टीपी मॉड्यूल संदर्भ 'get' invocations में साझा किया गया था, लेकिन मुझे वही व्यवहार दिखाई देता है (पहले globalAgent.maxSockets अनुरोध ठीक हैं, शेष सॉकेट की इच्छा के लिए लटका है)। यह सवाल पूछता है - इस डिफ़ॉल्ट रखरखाव व्यवहार का लाभ कैसे उठाएगा? –