Je suis un développeur C# expérimenté, mais je n'ai pas encore développé d'application de serveur TCP. Je dois maintenant développer un serveur hautement évolutif et performant, capable de gérer au moins 5 à 10 000 connexions simultanées : obtenir des données en octets bruts via GPRS à partir de dispositifs GPS.
Un processus de communication commun devrait ressembler à ceci :
- Le dispositif GPS établit une connexion avec mon serveur
- mon serveur répond si je veux obtenir des données
- le dispositif envoie des données GPS
- mon serveur envoie un rapport à l'appareil sur sa réception (sg like checksum)
- Je reçois de nouvelles données du GPS, je fais un rapport et cela se reproduit sans cesse.
- plus tard, le DISPOSITIF GPS ferme la connexion
Donc, dans mon serveur, j'ai besoin de
- tracer les clients connectés/actifs
- pour fermer tout client du côté serveur
- attraper l'événement, quand un dispositif ferme la connexion
- obtenir des données par octet
- envoyer des données aux clients
J'ai commencé à lire sur ce sujet sur Internet, mais cela semble être un cauchemar pour moi. Il y a beaucoup de moyens, mais je n'ai pas pu trouver lequel est le meilleur.
Les méthodes de socket asynchrones semblent être la meilleure solution pour moi, mais écrire du code dans ce style asynchrone est terrible et pas facile à déboguer.
Ma question est donc la suivante : quelle est, selon vous, la meilleure façon d'implémenter un serveur TCP haute performance en C# ? Connaissez-vous un bon composant open source pour faire cela ? (J'en ai essayé plusieurs, mais je n'ai pas pu en trouver un bon).