Indy IOCP-server

· Functies

Indy-servers gebruiken één thread per verbinding, wat betekent dat als je server 1000 gelijktijdige verbindingen moet afhandelen, er 1000 threads worden aangemaakt. Maar als er in plaats van 1000 verbindingen 10.000 verbindingen zijn, worden er 10.000 threads aangemaakt, enzovoort... uiteraard vraagt dit exponentieel meer hardwareresources en is dit niet bruikbaar voor servers met hoge belasting.

Windows biedt een API, IOCP genaamd, waarmee je duizenden verbindingen kunt afhandelen met een kleine threadpool. 

Vanaf sgcWebSockets 4.3.3 wordt IOCP ondersteund door Indy-servers:

Configuratie

 Om IOCP voor Indy-servers in te schakelen, ga je naar de property IOHandlerOptions en selecteer je iohIOCP als IOHandler-type.

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

IOCPThreads zijn de threads die worden gebruikt voor asynchrone IOCP-aanvragen (overlapped operations); WorkOpThreads zijn de threads die deze asynchrone aanvragen verwerken (bytes lezen en schrijven). De maximale waarde voor WorkOpThreads is 64, maar je moet deze waarde aanpassen aan je aantal fysieke processoren * 2; heb je dus een cpu met 16 processoren, stel dan een WorkOpThreads-waarde van 32 in. IOCP inschakelen voor Windows-servers is aanbevolen wanneer je duizenden verbindingen moet afhandelen; verwerkt je server maximaal 100 gelijktijdige verbindingen, dan kun je het standaard Indy-threadmodel blijven gebruiken.