2011-06-13 9 views
5

के साथ Node.js https.request मैं उपयोगकर्ताओं की फेसबुक दीवार से पोस्ट खींचना चाहता हूं।रख-रखाव शीर्षलेख

निम्नलिखित कोड का टुकड़ा काम करता है, लेकिन यह कभी नहीं समाप्त हो जाता है:

var https = require('https'); 

facebookWall = function(user) { 
    var options = { 
    host: 'graph.facebook.com', 
    port: 443, 
    path: '/me/home?access_token=' + user.facebook_token + '&since=' + encodeURIComponent(user.facebook_timestamp), 
    method: 'GET', 
    headers: { 
     'Connection':'keep-alive' 
    } 
    }; 

    var req = https.request(options) 
    .on('response', function(response) { 
    var body = ''; 
    response.on('data', function(data) { 
     body += data; 
     try { 
     var wallPosts = JSON.parse(body); 
     console.log("user " + user.id + " has " + wallPosts.data.length + " new items on their wall"); 
     } 
     catch (e) { 
     //console.log("waiting for more data chunks..."); 
     } 
    }) 
    }); 
    req.end(); 

    req.on('error', function(e) { 
    console.error(e); 
    }); 
} 

मुझे लगता है कि यह 'Connection':'keep-alive' हेडर के कारण होता है। जब मैं इसे 'Connection':'close' के साथ प्रतिस्थापित करता हूं तो स्क्रिप्ट समाप्त हो जाएगी जब सभी डेटा फेसबुक से पुनर्प्राप्त किए जाते हैं।

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

क्या कोई यह जानता है कि इसे कैसे पूरा किया जाए? मैं नोड.जेएस के लिए बिल्कुल नया हूं, इसलिए यदि मुझे कुछ स्पष्ट याद आ रहा है, तो मैं क्षमा चाहता हूं।

उत्तर

5

ऐसा इसलिए है क्योंकि नोड 4.x में https/tls/ssl के लिए अभी तक जीवित नहीं है और मैं भी 6.x के लिए विश्वास करता हूं। यही कारण है कि नोड websocket-server में यह भी काम नहीं करता है, https://github.com/nephics/node-websocket-server/commit/3a732bff6aabe694834d87086a7718be7c0ce138

देखें
0

मुझे लगता है कि आप https का उपयोग कर रहे हैं। इस बात पर निर्भर करता है कि आप किस नोड का उपयोग कर रहे हैं, लेकिन अभी अंतिम घटना के साथ एक ज्ञात समस्या है।

https://github.com/joyent/node/issues/728

0

आप निम्न कार्य करने के लिए है:

1) रखो response.on ('अंत', function() {... उत्पादन करना ...}); https.request के लिए प्रतिक्रिया.ऑन में डेटा आउटपुट न करें ('डेटा', ...);

2) कनेक्शन का उपयोग करें: जीवित रहें, "बंद करें" बहुत खराब प्रदर्शन समस्या का कारण बन जाएगा। मैंने बहुत परीक्षण किया है और मैं इसकी पुष्टि कर सकता हूं।

अन्य कि तुलना में:

3) अपने विकल्पों में, एजेंट निर्धारित करते हैं, और एक बड़ी संख्या के लिए agent.maxSockets सेट अगर आप संगामिति की जरूरत है। डिफ़ॉल्ट केवल 5.

4) आपको https.request टाइमआउट को संभालने के लिए अपना खुद का दिनचर्या बनाने पर विचार करना चाहिए। (कृपया github/joyent पर जाएं और इसके लिए खोजें। मूल रूप से टाइमटाइम त्रुटि को निकालने के लिए setTimeout का उपयोग करें)।

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