Haute performance serveur TCP en C#

Je suis expérimenté, développeur C#, mais je n'ai pas développé un serveur TCP application de la mesure. Maintenant, je dois développer une solution hautement évolutive et haute performance du serveur qui peut gérer au moins 5 à 10 mille connexions simultanées: arriver -raw - octets de données via GPRS GPS.

Une commune du processus de communication devrait ressembler à ceci:

  • GPS de l'appareil établit une connexion à mon serveur
  • mon serveur réponses, si je veux obtenir les données
  • appareil envoie des données GPS
  • mon serveur envoie un rapport à l'appareil à propos de l'obtenir (sg comme la somme de contrôle)
  • obtenir de nouvelles données de GPS, reportm et cela arrive encore et encore
  • plus tard, le DISPOSITIF de GPS ferme la connexion

Donc, à mon serveur, j'ai besoin de

  • trace connecté/clients actifs
  • fermer n'importe quel client à partir du serveur de côté
  • attraper le cas, lorsqu'un appareil ferme la connexion
  • obtenir de l'octet de données
  • envoyer des données aux clients

J'ai commencé à lire sur ce sujet sur internet, mais il semble être un cauchemar pour moi. Il y a beaucoup de façons, mais je ne pouvais pas savoir qui est le meilleur.

Async méthodes socket semble le mieux pour moi, mais l'écriture de code dans cet async style est terrible et pas facile à déboguer.

Donc ma question est: qui pensez-vous que la meilleure façon de mettre en œuvre une haute performance serveur TCP en C#? Connaissez-vous une bonne composant open source pour ce faire? (J'en ai essayé plusieurs, mais je ne pouvais pas trouver un bon.)

  • Pas sûr que je suis à la compréhension de l'écoulement. Que signifie "mon serveur envoie le rapport à l'appareil sur" veut dire? Aussi, pourquoi avez-vous besoin de garder la connexion ouverte? Pourquoi ne pas simplement ouvrir qu'en cas de besoin?
  • Pouvez-vous expliquer pourquoi vous dites "l'écriture de code dans ce async style est terrible et pas facile à déboguer" ?
  • Donc, il doit rester ouverte, car ils sont les connexions GPRS et GPS, et lorsqu'ils se connectent - surtout lorsqu'ils sont en itinérance - il coûte de l'argent. Donc, il est tout au sujet de l'argent, plus de connexion = plus de frais. Rapport: le serveur doit envoyer un rapport à l'appareil qu'il obtenir les données. (Ils sont quelques octets) Lorsque le dispositif d'obtenir ce rapport, il peut supprimer des données envoyées à partir de sa mémoire, si ce n'est pas ce rapport, essaie d'envoyer cette poche de nouveau.
  • Je suis en train de travailler sur le même projet. (Je pense que vous êtes buildind un système de suivi GPS ou quelque chose de similaire n'est-ce pas?). Je voudrais partager l'expérience avec vous. Il n'y a pas de messagerie Privée sur StackExchange. Pouvez-vous me contacter? Adresse : (mon-pseudo-nom À gmail.com) (rapidement avant que ce post est supprimé :p) je vous Remercie.
InformationsquelleAutor Tom | 2011-05-16