2010-02-07 7 views
0

Je veux développer un serveur qui écoutera sur certains ports spécifiques pour recevoir des demandes de l'appareil. Alors que le traitement d'une demande les étapes suivantes sont suivies.meilleure approche pour le serveur multithread sur .net?

  1. données lues à partir de flux de douille (envoyés à partir de l'appareil)
  2. données d'octet de Parse pour objets métier
  3. Utilisation base de données en utilisant demande de traitement d'objets métier à travers la couche de ado.net
  4. Envoyer réponse en binaire à l'appareil

Toutes les étapes ci-dessus prennent une fraction de seconde à traiter.

Actuellement, j'utilise le pool de threads pour rendre le serveur multithread.

Mon objectif est de créer un serveur capable de gérer un maximum de requêtes par seconde.

Quelle devrait être mon approche pour développer un serveur à efficacité maximale, puis pour tester ce serveur demande de gestion de capacité pour la vérification.

Merci

+1

Pas une réponse complète, donc je l'ai mis comme un commentaire, mais vous voudrez peut-être regarder dans "Ports d'achèvement E/S" à la place explicitement en utilisant un pool de threads. Notez qu'il s'agit d'un sujet plus vaste, mais que cela pourrait valoir la peine d'être envisagé, c'est-à-dire de passer du temps à y participer. WCF, par exemple les utilise à la place d'un simple pool de threads pour atteindre une concurrence plus élevée sans avoir besoin de générer/avoir des centaines de threads dans un pool. –

Répondre

3

J'aime ce que vous faites avec le pool de threads. Ma seule suggestion est de plafonner la piscine, car elle est par défaut à 50 threads dans la piscine, ce qui est beaucoup plus que tout ce que j'ai lu suggéré. Le changement de contexte avec autant de threads pourrait devenir ridicule. Le plafonner à 3-5 fois le nombre de cœurs que vous avez dans le serveur.

Le tester est assez simple. Si vous ajoutez simplement la ligne pour modifier le nombre de threads, ajoutez un temporisateur de précision. Une fois que vous avez écrit une autre petite application pour lancer un tas de requêtes serveur, voyez combien de threads sont les plus rapides. Si vous changez plus de code que cela, obtenez un serveur SVN sur la machine et branchez le code avec vos différentes versions et testez avec l'application de test et la minuterie mentionnées ci-dessus.

+0

Je pense que je ne devrais pas laisser de configuration de threads sur le pool de Thread lui-même. Comme vous l'avez spécifié j'ai développé un simulateur de dispositif de test qui envoie des demandes.Mais je ne peux pas augmenter sa capacité à envoyer plus de centaines de demandes. scénario est possible d'obtenir lakhs de demandes.Si je veux juste savoir quelles sont les façons d'améliorer les performances d'un serveur. Je suppose que l'one-way est d'utiliser des méthodes asynchrones de NetworkSocket. –

Questions connexes