EPOLL サーバー
高並列接続向けの Linux epoll アクセプターです。Indy がデフォルトで行う接続ごとに 1 スレッドという方式の代わりに、限られたスレッドプールを使用して、sgcWebSockets サーバーで数千もの接続を処理できます。
高並列接続向けの Linux epoll アクセプターです。Indy がデフォルトで行う接続ごとに 1 スレッドという方式の代わりに、限られたスレッドプールを使用して、sgcWebSockets サーバーで数千もの接続を処理できます。
Linux 上の Indy ベースサーバー向けの高パフォーマンス I/O モードです。IOHandlerOptions プロパティから標準サーバーで epoll を有効にすることで、接続ごとに 1 スレッドというモデルをはるかに超えてスケールできます。
TsgcWebSocketServer / TsgcWebSocketHTTPServer — IOHandlerOptions 経由で有効化します
Linux epoll スレッドプールアクセプター — Linux のみ
Linux
Enterprise
Indy サーバーの IOHandlerOptions プロパティで iohEPOLL を選択すると、デフォルトのスレッドモデルから epoll スレッドプールに切り替わります。
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;
epoll スレッドプールの動作と、ワークロードに合わせたチューニング方法を解説します。
接続ごとに 1 スレッドを割り当てる代わりに、限られたスレッドプールを使用して数千もの接続を処理します。非同期(オーバーラップ)リクエストは、各ソケットにスレッドを専有させるのではなく、プール全体にディスパッチされます。
EPOLL の非同期リクエストに使用するスレッドです。デフォルト値の 0 は、プロセッサ数から数が計算されることを意味します。Delphi 7 および 2007 では cpucount がサポートされていないため、デフォルトは 32 です。必要に応じて手動で調整してください。
デフォルトでは、ある接続への各リクエストは異なるプールスレッドで実行されることがあります。WorkOpThreads を設定すると、すべての接続を同じスレッドに固定できます。これはパフォーマンスに影響するため、この機能が必要な場合にのみゼロより大きい値を設定してください。
数千もの接続を処理する必要がある場合に推奨されます。サーバーが処理する同時接続が最大 100 程度であれば、デフォルトの Indy スレッドモデルのままで問題ありません。
EPOLL は書き込み時にのみソケットの切断を検出します。OnDisconnect を発生させるには、TsgcWebSocketClient で CleanDisconnect := True を有効にするか、クライアントを定期的に ping するサーバー側のハートビートを有効にしてください。
同時に開ける接続数を増やすには、オープンファイルディスクリプタの上限を引き上げてください。ulimit -n 10000 は、開けるファイルディスクリプタの最大数を 10000 に設定します。
このモードが依拠する仕組みの一次情報源です。