Je suis chargé de concevoir un serveur TCP/IP assez simple qui doit accepter les connexions de plusieurs clients. Il doit être écrit en C # et j'utilise .NET 4.5. Cela dit, je ne sais pas quel est l'état actuel de la technologie en matière d'évolutivité serveur/client TCP/IP dans .NET 4.5.
J'ai vu cet article: Comment écrire un serveur évolutif basé sur TCP/IP . Mais cela concerne .NET 2.0 et 3.5 et ne fait aucune mention du modèle async/wait.
Je suis capable d'écrire un serveur "à l'ancienne" ... mais je veux savoir ce qu'est la "nouvelle façon".
EDIT: Questions supplémentaires.
Quelle est la meilleure façon d'utiliser les nouvelles méthodes Async sur Socket, TcpClient ou TcpListener pour créer un serveur évolutif en C #?
Il n'y a pas de nouvelle méthode async
sur Socket
; les méthodes nommées *Async
sur Socket
constituent un ensemble spécial d'API permettant de réduire l'utilisation de la mémoire. TcpClient
et TcpListener
ont obtenu de nouvelles méthodes async
.
Si vous voulez la meilleure évolutivité, vous feriez probablement mieux d'utiliser les serveurs personnalisés de Stephen Toub pour Socket
. Si vous voulez utiliser le code le plus facile, vous feriez probablement mieux d'utiliser TcpClient
et TcpListener
.
Les nouvelles méthodes asynchrones exploitent-elles les ports d’achèvement des E/S?
Oui, comme la plupart des autres API asynchrones de la BCL. Autant que je sache, la classe Stream
est la seule à ne pas utiliser le protocole IOCP; Toutes les autres méthodes *Begin
/*End
/*Async
utilisent le protocole IOCP.
Rouler votre propre écouteur Socket est-il plus efficace ou les classes TcpListener/TcpClient sont-elles plutôt bonnes maintenant?
Les cours sont assez bons comme ils sont. Stephen Toub a un blog post qui est un peu plus efficace en termes d'utilisation de la mémoire.
Avec .net4.5, vous pouvez utiliser le mot clé async/wait pour construire le serveur TCP. Voici un exemple de code: async wait tcp server