2012-05-27 17 views
10

मैं नोड.जेएस के लिए बहुत नया हूं और मुझे node.dns.resolveNs फ़ंक्शन का उपयोग करके कोई समस्या है।नोड.जेएस DNS लुकअप - टाइमआउट कैसे सेट करें?

कुछ डोमेन पूरी तरह से नीचे हैं और प्रतिक्रिया प्राप्त करने में लगभग एक मिनट लगते हैं, जो आम तौर पर "क्वेरी एनटीएमओयूटी" होता है। क्या मुझे इसे कम अवधि में सेट करने का कोई तरीका है, उदाहरण के लिए 10 सेकंड?

+0

एनपीएम खोजना मैंने https://github.com/tjfontaine/node-dns भी पाया जो टाइमआउट का समर्थन करता है ....? – Alfred

उत्तर

19

मैं समारोह फोन पर सीधे एक टाइमआउट सेट करने के लिए किसी भी तरह से के बारे में सुनिश्चित नहीं हूँ, लेकिन आप अपने आप को बाहर समय को संभालने के लिए कॉल के चारों तरफ छोटे आवरण बना सकते हैं:

var dns = require('dns'); 

var nsLookup = function(domain, timeout, callback) { 
    var callbackCalled = false; 
    var doCallback = function(err, domains) { 
    if (callbackCalled) return; 
    callbackCalled = true; 
    callback(err, domains); 
    }; 

    setTimeout(function() { 
    doCallback(new Error("Timeout exceeded"), null); 
    }, timeout); 

    dns.resolveNs(domain, doCallback); 
}; 

nsLookup('stackoverflow.com', 1000, function(err, addresses) { 
    console.log("Results for stackoverflow.com, timeout 1000:"); 
    if (err) { 
    console.log("Err: " + err); 
    return; 
    } 
    console.log(addresses); 
}); 

nsLookup('stackoverflow.com', 1, function(err, addresses) { 
    console.log("Results for stackoverflow.com, timeout 1:"); 
    if (err) { 
    console.log("Err: " + err); 
    return; 
    } 
    console.log(addresses); 
}); 

ऊपर स्क्रिप्ट के लिए उत्पादन :

Results for stackoverflow.com, timeout 1: 
Err: Error: Timeout exceeded 
Results for stackoverflow.com, timeout 1000: 
[ 'ns1.serverfault.com', 
    'ns2.serverfault.com', 
    'ns3.serverfault.com' ] 
+0

वास्तव में, मुझे यह बहुत पसंद आया, मैं इसे अनुकूलित कर रहा हूं ताकि कॉलबैक सामान्य हो सके, और यह कस्टम टाइमआउट के साथ किसी भी नेटवर्क कॉल को कॉल करने का एक साफ तरीका बन सकता है ... – Merc

+0

आपको इसकी संख्या के बारे में सावधान रहना होगा समवर्ती अनुरोध (जैसा कि आप वास्तव में उन्हें समय-समय पर नहीं देखते हैं, यह सिर्फ एक अनुकरण है)। – aymericbeaumet

1

Node.js dns.resolve* उपयोग सी एरेस पुस्तकालय के नीचे है, जो समय समाप्ति और विभिन्न अन्य विकल्पों देशी रूप का समर्थन करता है। दुर्भाग्य से Node.js उन tunables का पर्दाफाश नहीं करता है, लेकिन उनमें से कुछ RES_OPTIONS पर्यावरण चर के माध्यम से सेट किया जा सकता है।

उदाहरण: RES_OPTIONS='ndots:3 retrans:1000 retry:3 rotate' node server.js

  • ndots: एक ही रूप में ARES_OPT_NDOTS
  • retrans: आदमी एक ही ARES_OPT_ROTATE रूप

देखें: एक ही रूप में ARES_OPT_TIMEOUTMS

  • retry: एक ही रूप में ARES_OPT_TRIES
  • rotate ए विवरण के लिए res_init_options (3) प्रत्येक विकल्प का अर्थ है, उदाहरण के लिए यहां http://manpages.ubuntu.com/manpages/zesty/man3/ares_init_options.3.html

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