Bâtiment Multi threaded Serveur TCP/IP

Je veux construire un serveur TCP/IP qui sera utilisé jusqu'à 100 clients en même temps, mais toujours pas sûr de savoir comment obtenir commencé.

au moins j'ai besoin du serveur:

  1. À l'écoute du client, et de stocker tous sur tableau ou une liste.
  2. pour chaque client, il a besoin de recevoir et d'envoyer des données basée sur son statut de client.
  3. Le serveur doit mettre à jour la liste des clients quand quelqu'un se connecter ou se déconnecter.
  4. Préfèrent travailler en tant que service avec interface graphique pour gérer.

Pourrait aider quelqu'un comment obtenir de commencer par ça,j'ai regardé indy échantillon, mais ils n'ont pas les aider, aussi regardé pour la plupart des composants, mais toujours à la recherche.

Comme mentionné dans d'autres questions, si votre nombre de clients est supérieur à 1000, vous pourriez avoir des énormes utilisation de la mémoire, si Indy est mis en place avec un thread par client simultanées. Avec async ou la poursuite en fonction des approches, il est possible de traiter beaucoup plus de connexions avec moins de threads. stackoverflow.com/questions/37185/...
Vous pourriez vouloir vérifier ICS composants par Francois Piette et de les comparer. Certaines personnes trouvent Indy mieux pour eux, certaines personnes trouvent ICS mieux pour eux.
Je pense que le blocage de l'approche est mal fait dans la plupart des cas. Pour avoir un thread actif pendant toute la durée de vie de la session ou de l'objet est tout simplement faux. Vous avez juste besoin d'un taks / pool de threads et séparée pour chaque demande que vous utilisez un fil à partir de ce pool. De cette façon, vous aurez tout autant de threads qu'il y a beaucoup de requête simultanées en cours d'exécution au même moment. Et bonne chance atteignant même 100.
Indy fournit 3 types de programmateurs: basé sur le Thread, Threads, avec un pool de threads, et à base de fibres. Par défaut Indy utilise le simple basé sur le thread du planificateur. Si vous avez besoin d'un pool de threads, tout ce que vous devez faire est d'attribuer un TIdSchedulerOfThreadPool instance de votre IdTCPServer.Planificateur de propriété.

OriginalL'auteur DelphiDev | 2010-02-18