2009-04-28 7 views
0

J'utilise un UdpClient pour envoyer des paquets à un serveur. J'initialise le UdpClient lors de la construction de mon objet Sender, en utilisant le constructeur (hostname, port). Lorsqu'il est construit de cette manière, UdpClient résout le nom d'hôte en adresse IP. Les appels suivants à l'objet UdpClient utilisent l'adresse IP.Comment faire pour que UdpClient réagisse aux mises à jour DNS

Malheureusement, si l'alias DNS utilisé est mis à jour via le système DNS pour pointer vers une adresse IP différente, cette modification n'est pas répercutée dans mon objet expéditeur sauf s'il est recréé.

Quelle serait la meilleure façon de faire réagir mon objet Sender aux changements DNS en temps opportun? La performance est très importante. Je peux penser à plusieurs solutions:

  1. Effectuer une résolution DNS à chaque appel (c'est-à-dire en utilisant la surcharge Envoyer qui accepte un paramètre de nom d'hôte). Cela peut effectivement être assez rapide à cause du cache DNS Windows, je ne sais pas.
  2. Avoir une sorte de vérificateur DNS s'exécutant sur un thread minuteur pour vérifier périodiquement si l'alias DNS résout à une adresse IP différente. Si c'est le cas, cela mettrait UdpClient à jour pour utiliser la nouvelle adresse IP. Cependant, je ne veux pas vraiment verrouiller l'objet UdpClient à chaque appel - comme je l'ai dit, la performance est importante.

Quelqu'un at-il une expérience de faire cela?

Répondre

2

Je voudrais séparer la résolution d'adresse du UdpClient.

  1. Utilisez Dns classe resolveIPaddress (et stocker dans la variable locale)
  2. Utilisez le constructeur parameterless de UdpClient,
  3. Ne pas faire une connextion sur UdpClient
  4. Utilisez le Send explicite avec le IPEndPoint paramètre.

Sur un fil de fond:

  1. vérifier toutes les X secondes pour la variable DNS
  2. remplacer la IPEndPoint locale mise à jour vous passez à votre appel UdpClient.Send.

Pas besoin de détruire votre UdpClient chaque fois que vous faites cela. Aussi, pas besoin de verrouiller lors de la mise à jour le IPEndPoint. Le pire des cas est que vous avez un sale envoyer à une ancienne adresse, mais puisque vous n'êtes pas immédiatement informé sur les mises à jour, vous aurez des envois sales de toute façon.