Indy IOCP Server

· Fonctionnalités

Les serveurs Indy utilisent un thread par connexion : si ton serveur doit gérer 1000 connexions simultanées, il crée 1000 threads. Mais avec 10 000 connexions au lieu de 1000, il crée 10 000 threads, et ainsi de suite… Bien sûr, cela exige des ressources matérielles exponentielles et n'est pas utilisable pour les serveurs à forte charge.

Windows fournit une API appelée IOCP, qui permet de gérer des milliers de connexions avec un petit pool de threads. 

Depuis sgcWebSockets 4.3.3, IOCP est pris en charge par les serveurs Indy :

Configuration

 Pour activer IOCP sur les serveurs Indy, va dans la propriété IOHandlerOptions et sélectionne iohIOCP comme type d'IOHandler.

Server.IOHandlerOptions.IOHandlerType := iohIOCP;
Server.IOHandlerOptions.IOCP.IOCPThreads := 8;
Server.IOHandlerOptions.IOCP.WorkOpThreads := 32;

IOCPThreads sont les threads utilisés pour les requêtes asynchrones IOCP (opérations overlapped) et WorkOpThreads sont les threads utilisés pour traiter ces requêtes asynchrones (lecture/écriture d'octets). La valeur maximale de WorkOpThreads est de 64, mais tu dois ajuster cette valeur en fonction de ton nombre de processeurs physiques * 2 : si tu as un CPU à 16 processeurs, définis WorkOpThreads à 32. Activer IOCP sur les serveurs Windows est recommandé lorsque tu dois gérer des milliers de connexions. Si ton serveur ne gère que 100 connexions simultanées au maximum, tu peux rester avec le modèle de threads Indy par défaut.