2012-05-27 11 views
10

私はNode.jsの新機能です。node.dns.resolveNs関数を使用して問題が発生しています。Node.js DNSルックアップ - タイムアウトを設定するには?

一部のドメインは完全に停止しており、応答を取得するのに約1分かかります。通常は「queryNs ETIMEOUT」です。もっと短い時間、例えば10秒に設定する方法はありますか?

+0

npmを検索しています。タイムアウトもサポートする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*使用C-アールライブラリーの下に、。残念ながら、Node.jsはこれらの調整パラメータを公開しませんが、そのうちのいくつかはRES_OPTIONS環境変数で設定できます。

例:RES_OPTIONS='ndots:3 retrans:1000 retry:3 rotate' node server.js

  • ndots:ARES_OPT_TIMEOUTMS
  • retryと同じ:ARES_OPT_TRIES
  • rotateと同じ:ARES_OPT_ROTATE

参照の男と同じARES_OPT_NDOTS

  • retransと同じa各オプションの意味の詳細については、res_init_options(3)を参照してください。http://manpages.ubuntu.com/manpages/zesty/man3/ares_init_options.3.html

  • 関連する問題