EPOLL サーバー

高並列接続向けの Linux epoll アクセプターです。Indy がデフォルトで行う接続ごとに 1 スレッドという方式の代わりに、限られたスレッドプールを使用して、sgcWebSockets サーバーで数千もの接続を処理できます。

EPOLL I/O Handler

Linux 上の Indy ベースサーバー向けの高パフォーマンス I/O モードです。IOHandlerOptions プロパティから標準サーバーで epoll を有効にすることで、接続ごとに 1 スレッドというモデルをはるかに超えてスケールできます。

コンポーネントクラス

TsgcWebSocketServer / TsgcWebSocketHTTPServerIOHandlerOptions 経由で有効化します

仕組み

Linux epoll スレッドプールアクセプター — Linux のみ

プラットフォーム

Linux

エディション

Enterprise

IOHandler タイプを設定するだけ

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 スレッドプールの動作と、ワークロードに合わせたチューニング方法を解説します。

スレッドプール I/O

接続ごとに 1 スレッドを割り当てる代わりに、限られたスレッドプールを使用して数千もの接続を処理します。非同期(オーバーラップ)リクエストは、各ソケットにスレッドを専有させるのではなく、プール全体にディスパッチされます。

EPOLLThreads

EPOLL の非同期リクエストに使用するスレッドです。デフォルト値の 0 は、プロセッサ数から数が計算されることを意味します。Delphi 7 および 2007 では cpucount がサポートされていないため、デフォルトは 32 です。必要に応じて手動で調整してください。

WorkOpThreads

デフォルトでは、ある接続への各リクエストは異なるプールスレッドで実行されることがあります。WorkOpThreads を設定すると、すべての接続を同じスレッドに固定できます。これはパフォーマンスに影響するため、この機能が必要な場合にのみゼロより大きい値を設定してください。

使いどころ

数千もの接続を処理する必要がある場合に推奨されます。サーバーが処理する同時接続が最大 100 程度であれば、デフォルトの Indy スレッドモデルのままで問題ありません。

切断検出

EPOLL は書き込み時にのみソケットの切断を検出します。OnDisconnect を発生させるには、TsgcWebSocketClientCleanDisconnect := True を有効にするか、クライアントを定期的に ping するサーバー側のハートビートを有効にしてください。

Linux の接続数上限

同時に開ける接続数を増やすには、オープンファイルディスクリプタの上限を引き上げてください。ulimit -n 10000 は、開けるファイルディスクリプタの最大数を 10000 に設定します。

仕様 & 参考資料

このモードが依拠する仕組みの一次情報源です。

ドキュメント & デモ

オンラインヘルプへのディープリンク、すぐに実行できるデモプロジェクト、そして詳細なマニュアルをご覧いただけます。

オンラインヘルプ — EPOLL Delphi、C++ Builder、.NET のコードサンプルを含む完全な機能リファレンスです。
デモプロジェクト — Demos\Server すぐに実行できるサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています — 下記から体験版をダウンロードしてください。
ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅した包括的なマニュアルです。

Linux で数千もの接続にスケールする

無料体験版をダウンロードして、Delphi サーバーを Linux epoll スレッドプールに切り替えましょう。