2010-02-11 6 views
7

Y at-il quelque chose comme twisted (python) ou eventmachine (ruby) dans .net land?Bibliothèque de serveur UDP réseau multithread pour .net

Ai-je même besoin de cette abstraction? J'écoute un seul périphérique IO qui m'envoie des événements pour trois ou quatre capteurs analogiques. Quels sont les risques d'utiliser simplement une boucle UdpClient? Je ne peux pas manquer des événements, mais la pile ip va-t-elle gérer la file d'attente des messages pour moi? Est-ce que tout cela dépend du travail que le thread essaie de faire une fois que je reçois un message? Ce que je cherche dans une abstraction est d'enlever la complication du threading et de la synchronisation du problème.

+0

Découvrez http://kayakhttp.com/ –

+0

C'est presque exactement ce dont j'ai besoin, seulement je n'ai pas besoin de HTTP, j'écoute des événements UDP. Merci pour le lien cependant, désolé je n'étais pas clair. –

Répondre

5

Je pense que vous le rendez trop compliqué. Vous n'avez qu'à ouvrir une socket UDP et y définir un rappel asynchrone. Pour chaque paquet entrant, placez-le dans une file d'attente et définissez à nouveau le rappel. C'est tout.

assurez-vous que lors de la mise en file d'attente et de la file d'attente, vous définissez un verrou sur la file d'attente.

c'est aussi simple que ça et les performances seront excellentes.

R

0

Je recommanderais ICE c'est un moteur de communication qui vous permettra de faire abstraction du filetage et de la communication (la documentation est un peu exhaustive).

+0

ICE utilise une licence GPLv2, ce qui le rend incompatible avec la licence AGPL (qui est une licence copyleft spécifiquement conçue pour les applications réseau). Cela bloque tout serveur réseau copyleft que vous voulez construire. http://en.wikipedia.org/wiki/Affero_General_Public_License#Compatibility_with_the_GPL – Nuzzolilo

+0

Certes, je n'ai pas pris en compte l'aspect licence. –

0

Le problème est qu'avec Udp, vous assumez automatiquement le risque de perte de paquets. J'ai lu la documentation sur ICE (comme Steve l'a suggéré), et c'est très exhaustive. Il semble que ICE fonctionnera pour Udp, cependant, il semble que Tcp est préféré par les développeurs. Je comprends de la documentation ICE qu'il ne fournit aucun mécanisme intensif pour assurer des communications UDP fiables.

Il est en fait très facile de configurer un client ou un serveur UDP asynchrone. Votre vrai travail consiste à vérifier les paquets complets et la mise en mémoire tampon. Les implémentations asynchrones devraient vous empêcher de gérer les threads.

0

On dirait que vous êtes à la recherche pour la multidiffusion fiable -Vous pourrait essayer RMF, il fera la fiabilité et de livrer les messages à l'aide ASYC callbacks de la file d'attente des messages entrants. IBM fait également WebSphere qui a un composant UDP. EmCaster est également une option - cependant le développement semble s'être arrêté en 2008.

Si vous n'allez pas transmettre ces paquets (ou événements) à d'autres machines, vous pouvez simplement utiliser quelque chose de simple comme des fichiers mappés en mémoire. ou d'autres formes d'IPC.