I server Indy usano un thread per ogni connessione, questo significa che se il tuo server deve gestire 1000 connessioni concorrenti, creerà 1000 thread. Ma se invece di 1000 connessioni ce ne sono 10.000, crea 10.000 thread e così via... ovviamente, questo richiede risorse hardware esponenziali e non è utilizzabile per server ad alto carico.
Windows fornisce un'API, chiamata IOCP, che permette di gestire migliaia di connessioni con un piccolo pool di thread.
Da sgcWebSockets 4.3.3, IOCP è supportato dai server Indy:
- TsgcWebSocketServer
- TsgcWebSocketHTTPServer
Configurazione
Per abilitare IOCP per i server Indy, vai alla proprietà IOHandlerOptions e seleziona iohIOCP come tipo di IOHandler.
Server.IOHandlerOptions.IOHandlerType := iohIOCP; Server.IOHandlerOptions.IOCP.IOCPThreads := 8; Server.IOHandlerOptions.IOCP.WorkOpThreads := 32;
IOCPThreads sono i thread usati per le richieste asincrone IOCP (operazioni overlapped) e WorkOpThreads sono i thread usati per elaborare queste richieste asincrone (lettura e scrittura di byte). Il valore massimo di WorkOpThreads è 64, ma devi regolare questo valore in base al numero dei tuoi processori fisici * 2, quindi se hai una CPU con 16 processori, imposta un valore di WorkOpThreads di 32. Abilitare IOCP per i server Windows è consigliato quando devi gestire migliaia di connessioni, se il tuo server gestisce al massimo solo 100 connessioni concorrenti puoi rimanere con il modello di thread Indy predefinito.
