2010-08-27 21 views
8

में टाइमआउट कैसे सेट करूं, मैं एक node.js एप्लिकेशन लिख रहा हूं जिसे सर्वर से बात करने की आवश्यकता है। यह निम्न कोड के साथ एक http कनेक्शन स्थापित करता है:मैं क्लाइंट http कनेक्शन के लिए node.js

var client = http.createClient(u.port, u.hostname, u.secure); 
client.on("error", function(exception) { 
    logger.error("error from client"); 
}); 
var request = client.request(method, u.path, headers); 

मैं कनेक्शन पर एक समय-समाप्ति सेट के लिए Node.js दस्तावेज में किसी भी विकल्प दिखाई नहीं देता है, और यह डिफ़ॉल्ट रूप से 20 सेकंड के लिए सेट किया जा रहा है। मेरी समस्या यह है कि मेरे पास चीन में उपयोगकर्ता धीमे या चंचल नेटवर्क के रूप में दिखते हैं, जो कभी-कभी यूएस में हमारे डेटासेंटर से कनेक्ट टाइमआउट को हिट करते हैं। मैं टाइमआउट को 1 मिनट तक बढ़ाना चाहता हूं, यह देखने के लिए कि क्या यह उनके लिए ठीक है या नहीं।

क्या node.js में ऐसा करने का कोई तरीका है?

+1

सही उत्तर इस डुप्लिकेट प्रश्न में हैं: http://stackoverflow.com/questions/6214902/how-to-set-a-timeout-on-a-http-request-in-node (विशेष रूप से douwe देखें उत्तर) – Sandman4

+0

संभावित डुप्लिकेट [नोड में http.request() पर टाइमआउट कैसे सेट करें?] (https://stackoverflow.com/questions/6214902/how-to-set-a-timeout-on-a- http-request-in-node) –

उत्तर

4

मुझे लगता है कि आप की तरह कुछ कर सकते हैं:

request.connection.setTimeout(60000) 

request.connection रिटर्न कनेक्शन से संबंधित net.Stream वस्तु। और नेट.स्ट्रीम में एक सेटटाइमआउट विधि है।

+0

काम नहीं करता है। मैंने यह भी पाया कि वहाँ क्लाइंट.सेटटाइमआउट() विधि है, जो या तो काम नहीं करती है। मुझे लगता है कि कनेक्शन पर यातायात के लिए ये समय-समय पर हैं, कनेक्शन स्थापित करने के लिए नहीं। –

+0

दाएं। ठीक है तो ... मेरे पास कुछ कोड के माध्यम से एक और trawl होगा। यह जांचने लायक हो सकता है कि कैसे कुछ नोड ढांचे इसे संभालते हैं। –

+0

धन्यवाद कि मेरे लिए एक वेबस्केट प्रॉक्सी समस्या हल हो गई;) कनेक्शन एक मिनट या उसके बाद मर गए थे। –

6

request.socket.setTimeout का प्रयास करें (60000); // 60 सेकंड

+1

कम से कम नोड किनारे के साथ यह सही उत्तर है ... https://github.com/ry/node/blob/master/lib/http.js#L774 – Quickredfox

1

आपको टाइमआउट सेट करने से पहले क्लाइंट सॉकेट कनेक्शन पहले स्थापित करने की प्रतीक्षा करनी होगी।

req.on('socket', function (socket) { 
    myTimeout = 500; // millis 
    socket.setTimeout(myTimeout); 
    socket.on('timeout', function() { 
     console.log("Timeout, aborting request") 
     req.abort(); 
    }); 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
    // error callback will receive a "socket hang up" on timeout 
}); 

See this answer: ऐसा करने के लिए, 'सॉकेट' घटना के लिए एक कॉलबैक जोड़ें।

1

नोड में कनेक्ट टाइमआउट में कोई क्षमता नहीं है। चूंकि आमतौर पर टाइमआउट कनेक्ट होते हैं (यानी कनेक्शन टाइमआउट स्थापित करना) सभी अनुप्रयोगों के लिए ओएस-व्यापी सेटिंग है (उदाहरण के लिए, 21 सेकंड in Windows, 20 से 120 सेकंड in Linux)। Timouts in Request package भी देखें।

इसके विपरीत, नोड कम समय निर्धारित करने की अनुमति देता है और कनेक्शन स्थापित होने पर भी कनेक्टिंग को रोकता है।

आगे के समय (कनेक्शन स्थापित होने के मामले में) दस्तावेज के अनुसार नियंत्रित किया जा सकता है (request.setTimeout, socket.setTimeout देखें)।

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