J'ai une application serveur développée en utilisant C++ fonctionnant sur la plate-forme Windows. Ce serveur utilise des sockets Windows pour communiquer avec les clients utilisant TCP. L'architecture du serveur de socket dans l'application est assez simple. L'application regroupe le nombre de threads «x» au démarrage. Chaque fois qu'un nouveau client se connecte au serveur, l'un des threads du pool est utilisé pour le service de ce client. Cette conception fonctionne bien même lorsque 750-1000 clients se connectent au serveur avec seulement 20 threads pour servir les clients du pool. La raison pour laquelle je crois que cela fonctionne même quand il y a plus de 20 connexions client simultanées correspondant aux 20 threads est que Windows met en file d'attente toutes les connexions client entrantes pendant un court laps de temps avant d'envoyer la connexion refusée. Pendant ce temps mis en file d'attente, l'un des threads de service du pool deviendra disponible pour traiter la connexion du client en file d'attente. Maintenant, mes questions sont, est-ce que cette conception est évolutive? Quelle est la limite maximale pour la file d'attente de socket Windows interne? Puis-je accueillir des dizaines de milliers de clients en augmentant la taille du pool de threads de 100? Est-ce que Windows autorise même les applications à avoir plus de 100 threads? Sinon, comment sont conçues les applications comme le serveur Web IIS? Combien de connexions client simultanées un seul serveur gère-t-il avec IIS?Application personnalisée utilisant Winsock vs IIS Server design
2
A
Répondre
0
Regardez les ports d'achèvement d'E/S; ils sont comment IIS est conçu. Ils vous permettent d'adapter un serveur à 10 000 connexions simultanées avec très peu de threads sur un matériel relativement modeste.
J'ai écrit quelques articles sur ce type d'architecture et j'ai un framework gratuit qui vous permet de découper et d'écrire votre logique métier sans trop vous soucier des détails du port de complétion d'E/S des choses pour commencer; le framework inclut toutes les sources, donc vous pouvez le creuser et le personnaliser une fois que vous avez quelque chose qui fonctionne.
Le framework de serveur gratuit peut être trouvé here et cela inclut le code source et les liens vers les articles originaux que j'ai écrits à son sujet.