EPOLL Server

Ein Linux-epoll-Acceptor für hohe Nebenläufigkeit. Bedienen Sie Tausende von Verbindungen auf dem sgcWebSockets-Server mit einem begrenzten Thread-Pool statt einem Thread pro Verbindung, wie Indy es standardmäßig tut.

EPOLL-I/O-Handler

Ein hochperformanter I/O-Modus für Indy-basierte Server unter Linux. Aktivieren Sie epoll auf dem Standard-Server über die Eigenschaft IOHandlerOptions und skalieren Sie weit über das Modell mit einem Thread pro Verbindung hinaus.

Komponentenklasse

TsgcWebSocketServer / TsgcWebSocketHTTPServer — aktiviert über IOHandlerOptions

Mechanismus

Linux-epoll-Thread-Pool-Acceptor — nur Linux

Plattformen

Linux

Edition

Enterprise

IOHandler-Typ setzen, loslegen

Wählen Sie iohEPOLL in der Eigenschaft IOHandlerOptions eines Indy-Servers, um vom Standard-Thread-Modell auf den epoll-Thread-Pool umzustellen.

Server.IOHandlerOptions.IOHandlerType := iohEPOLL;
Server.IOHandlerOptions.EPOLL.EPOLLThreads := 0;
Server.IOHandlerOptions.EPOLL.WorkOpThreads := 0;
Server->IOHandlerOptions->IOHandlerType = iohEPOLL;
Server->IOHandlerOptions->EPOLL->EPOLLThreads = 0;
Server->IOHandlerOptions->EPOLL->WorkOpThreads = 0;
Server.IOHandlerOptions.IOHandlerType = iohEPOLL;
Server.IOHandlerOptions.EPOLL.EPOLLThreads = 0;
Server.IOHandlerOptions.EPOLL.WorkOpThreads = 0;

Was steckt drin

Wie der epoll-Thread-Pool funktioniert und wie Sie ihn auf Ihre Last abstimmen.

Thread-Pool-I/O

Bedienen Sie Tausende von Verbindungen mit einem begrenzten Thread-Pool statt einem Thread pro Verbindung. Asynchrone (überlappte) Anfragen werden über den Pool verteilt, statt jedem Socket einen eigenen Thread zuzuweisen.

EPOLLThreads

Threads für asynchrone EPOLL-Anfragen. Der Standardwert 0 bedeutet, dass die Anzahl aus der Prozessoranzahl berechnet wird. Unter Delphi 7 und 2007 ist der Standard 32, da cpucount nicht unterstützt wird. Passen Sie ihn bei Bedarf manuell an.

WorkOpThreads

Standardmäßig kann jede Anfrage einer Verbindung auf einem anderen Pool-Thread laufen. Setzen Sie WorkOpThreads, um jede Verbindung an denselben Thread zu binden. Das wirkt sich auf die Performance aus, setzen Sie daher nur dann einen Wert größer als null, wenn Sie diese Funktion benötigen.

Wann zu verwenden

Empfohlen, wenn Sie Tausende von Verbindungen bedienen müssen. Wenn Ihr Server maximal etwa 100 gleichzeitige Verbindungen verarbeitet, können Sie beim standardmäßigen Indy-Thread-Modell bleiben.

Trennungserkennung

EPOLL erkennt einen toten Socket nur beim Schreiben. Um OnDisconnect auszulösen, aktivieren Sie CleanDisconnect := True auf dem TsgcWebSocketClient oder einen serverseitigen Heartbeat, der die Clients regelmäßig anpingt.

Linux-Verbindungslimit

Erhöhen Sie das Limit für offene Dateideskriptoren, um die Anzahl gleichzeitig offener Verbindungen zu steigern. ulimit -n 10000 setzt die maximale Anzahl offener Dateideskriptoren auf 10000.

Spezifikationen & Referenzen

Maßgebliche Quellen für den Mechanismus, auf den sich dieser Modus stützt.

Dokumentation & Demos

Springe direkt zur Online-Hilfe, hol dir das sofort lauffähige Demo-Projekt und lies das vollständige Handbuch.

Online-Hilfe — EPOLL Vollständige Funktionsreferenz mit Codebeispielen für Delphi, C++ Builder und .NET.
Demo-Projekt — Demos\Server Sofort lauffähiges Beispielprojekt. Im sgcWebSockets-Paket enthalten — lade die Testversion unten herunter.
Benutzerhandbuch (PDF) Umfassendes Handbuch, das jede Komponente der Bibliothek behandelt.

Skaliere unter Linux auf Tausende von Verbindungen

Lade die kostenlose Testversion herunter und stelle deinen Delphi-Server auf den Linux-epoll-Thread-Pool um.