2009-04-28 4 views
0

UdpClientを使用してパケットをサーバーに送信しています。私は(ホスト名、ポート)コンストラクタを使用して、私のSenderオブジェクトの構築時にUdpClientを初期化しています。このように構成すると、UdpClientはホスト名をIPアドレスに解決します。その後のUdpClientオブジェクトの呼び出しでは、IPアドレスが使用されます。UdpClientをDNSアップデートに対応させる方法

残念ながら、別のIPアドレスを指すようにDNSシステムによって更新されたDNSエイリアスが再作成されない限り、この変更は送信者オブジェクトに反映されません。

SenderオブジェクトをDNS変更に適時に対応させる最も良い方法は何ですか?パフォーマンスは非常に重要です。

  1. すべての呼び出しでDNS解決を行う(つまり、ホスト名パラメータを受け入れるSend overloadを使用する)ことが考えられます。これは実際にはWindows DNSキャッシュのためにかなり高速かもしれませんが、わかりません。
  2. DNSエイリアスが別のIPに解決するかどうか定期的にチェックするタイマースレッド上で実行されている何らかの種類のDNSチェッカーを持つ。そうであれば、それは何とか新しいIPアドレスを使用するようにUdpClientを更新します。しかし、私は本当にすべての呼び出しでUdpClientオブジェクトをロックしたくありません - 私が言ったように、パフォーマンスは重要です。

誰でもこれをやった経験がありますか?

答えて

2

アドレス解決をUdpClientから分離します。

  1. 使用DnsresolveIPaddressのクラス(ローカル変数に格納)
  2. IPEndPointで明示的Sendを使用UdpClient
  3. に接続しないでください
  4. UdpClientのパラメータなしのコンストラクタを使用しますパラメータ。バックグラウンドスレッドで

:更新DNS

  • ごとにX秒は、あなたのUdpClient.Sendコールに渡すローカルIPEndPoint変数を置き換える

    1. チェック。

    これを行うたびにUdpClientを破壊する必要はありません。 また、IPEndPointを更新するときにロックする必要はありません。悪いケースは古いアドレスに1つのダーティー・センドを送信していることですが、更新がすぐに通知されないため、とにかくダーティー・センドが発生します。

  • 関連する問題