Indy IOCP Server

· Funktionen

Indy-Server nutzen einen Thread pro Verbindung. Das bedeutet: Muss dein Server 1000 gleichzeitige Verbindungen verarbeiten, erzeugt er 1000 Threads. Sind es statt 1000 dann 10.000 Verbindungen, erzeugt er 10.000 Threads usw. Das erfordert exponentiell mehr Hardware-Ressourcen und ist für hoch ausgelastete Server nicht praktikabel.

Windows bietet eine API namens IOCP, mit der sich mit einem kleinen Thread-Pool tausende Verbindungen verarbeiten lassen. 

Ab sgcWebSockets 4.3.3 wird IOCP von Indy-Servern unterstützt:

Konfiguration

 Um IOCP für Indy-Server zu aktivieren, gehe zur Eigenschaft IOHandlerOptions und wähle iohIOCP als IOHandler-Typ.

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

IOCPThreads sind die Threads für asynchrone IOCP-Anfragen (überlappte Operationen), und WorkOpThreads sind die Threads zur Verarbeitung dieser asynchronen Anfragen (Lesen und Schreiben von Bytes). Der Maximalwert für WorkOpThreads ist 64. Du solltest diesen Wert an die Anzahl deiner physischen Prozessoren * 2 anpassen — bei einer CPU mit 16 Kernen also WorkOpThreads = 32. IOCP für Windows-Server wird empfohlen, wenn du tausende Verbindungen verarbeiten musst. Verarbeitet dein Server höchstens 100 gleichzeitige Verbindungen, kannst du beim Standard-Indy-Thread-Modell bleiben.