Servidor Indy IOCP

· Características

Los servidores Indy usan un hilo por cada conexión; esto significa que si tu servidor debe gestionar 1000 conexiones concurrentes, creará 1000 hilos. Pero si en lugar de 1000 conexiones hay 10.000 conexiones, crea 10.000 hilos y así sucesivamente... por supuesto, esto requiere recursos hardware exponenciales y no es utilizable para servidores de alta carga.

Windows proporciona una API, llamada IOCP, que permite gestionar con un pequeño pool de hilos miles de conexiones. 

Desde sgcWebSockets 4.3.3 IOCP es compatible con los servidores Indy:

Configuración

 Para activar IOCP en los servidores Indy, ve a la propiedad IOHandlerOptions y selecciona iohIOCP como IOHandler Type.

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

IOCPThreads son los hilos usados para las peticiones asíncronas IOCP (operaciones overlapped) y WorkOpThreads son los hilos usados para procesar estas peticiones asíncronas (leer y escribir bytes). El valor máximo de WorkOpThreads es 64, pero debes ajustar este valor en función de tu número de procesadores físicos * 2; por lo tanto, si tienes una cpu con 16 procesadores, establece un valor de WorkOpThreads de 32. Activar IOCP para servidores windows está recomendado cuando necesitas gestionar miles de conexiones; si tu servidor solo gestiona 100 conexiones concurrentes como máximo, puedes quedarte con el modelo de hilos Indy por defecto.