2010-01-08 4 views
0

Je recherche une alternative à l'utilisation de la multidiffusion UDP sur le .NET Framework et je recherche des suggestions.Alternatives .NET à la multidiffusion UDP

Je dois envoyer des messages à plusieurs serveurs Web exécutant pas mal d'applications ASP.NET. Ces messages seraient à sens unique, provenant de plusieurs machines différentes. La multidiffusion UDP serait parfaite, sauf que je ne peux pas l'utiliser parce qu'elle nécessite des droits administratifs. Voir ASP.NET Multicast UdpClient problems pour plus de détails sur pourquoi.

Y a-t-il autre chose qui fonctionnerait de manière similaire, permettant à plusieurs applications de recevoir des messages de type diffusion?

Répondre

1

Avez-vous envisagé d'utiliser MSMQ ou une base de données SQL? À l'aide d'une base de données SQL 2008, vous pouvez également demander au serveur SQL de vous informer des modifications.

1

Quelques possibilités viennent à l'esprit:

  1. Mettez votre code UDP multicast dans un service Windows. En n'ayant qu'un seul écouteur sur le port, vous n'auriez pas besoin d'autorisations élevées. Vous pouvez communiquer avec le service en utilisant la mémoire partagée ou un certain nombre d'autres techniques.

  2. Utilisez des connexions TCP brutes point-à-point asynchrones avec un nœud central d'envoi/de relais de messages. Envoyer et recevoir des messages avec des E/S asynchrones réduirait le temps d'attente.

  3. Utilisez un mécanisme de mise en attente persistante tel que Service Broker dans SQL Server. C'est toujours unicast, mais vous pourriez avoir une seule procédure stockée qui a envoyé des messages à tous les points de terminaison. Encore une fois, utilisez les E/S asynchrones pour minimiser les temps d'attente.

  4. Utilisez un bus de transmission de messages commercial qui ne fonctionne plus - quelque chose comme Tibco Rendezvous.

0

ActiveMQ est un service gratuit tel que msmq. Il peut gérer des messages non durables tels que le vôtre. L'inconvénient est que cela nécessite un serveur, car il est basiquement comme l'approche de style parlé et hub où vous avez un serveur central. Mais cela fonctionne bien dans .NET et a de bonnes performances. J'envoie des centaines de messages par seconde et ça se passe très bien.

1

ØMQ a deux CLR bindings qui peut être productif que rouler votre propre couche de messagerie. Vous pouvez utiliser des sockets PUB/SUB pour la multidiffusion de messages sur TCP ou IP multicast comme vous le souhaitez. De plus, comme la bibliothèque est externe à ASP.net, cela devrait supprimer le problème de droits restreints que vous rencontrez.

0

Redis pubsub en utilisant l'API StackExchange.Redis.

Simple, d'excellentes performances, évolutif et si vous le choisissez, vous êtes tenu de l'utiliser pour d'autres choses comme la mise en cache/gestion de session/surveillance ou l'une des autres utilisations courantes de cette boîte à outils.