IOCP サーバー
高並列接続向けの Windows I/O Completion Ports アクセプターです。sgcWebSockets サーバーを IOCP IOHandler に切り替えることで、接続ごとに 1 スレッドを割り当てる代わりに、小さく固定されたスレッドプールから数千もの接続を処理できます。
高並列接続向けの Windows I/O Completion Ports アクセプターです。sgcWebSockets サーバーを IOCP IOHandler に切り替えることで、接続ごとに 1 スレッドを割り当てる代わりに、小さく固定されたスレッドプールから数千もの接続を処理できます。
標準の sgcWebSockets サーバー向けの Windows 専用 I/O Completion Ports モードです。IOHandlerOptions から有効にすることで、デフォルトの Indy の接続ごとに 1 スレッドというモデルをはるかに超えてスケールできます。
TsgcWebSocketServer / TsgcWebSocketHTTPServer — IOHandlerOptions 経由で有効化します。
Windows I/O Completion Ports(Windows のみ)。
Windows
Enterprise
IOHandlerOptions プロパティで IOHandler Type に iohIOCP を選択します。スレッド数をゼロのままにすると、CPU 数から自動的にサイズが決定されます。
Server.IOHandlerOptions.IOHandlerType := iohIOCP;
Server.IOHandlerOptions.IOCP.IOCPThreads := 0;
Server.IOHandlerOptions.IOCP.WorkOpThreads := 0;
Server->IOHandlerOptions->IOHandlerType = iohIOCP;
Server->IOHandlerOptions->IOCP->IOCPThreads = 0;
Server->IOHandlerOptions->IOCP->WorkOpThreads = 0;
Server.IOHandlerOptions.IOHandlerType = iohIOCP;
Server.IOHandlerOptions.IOCP.IOCPThreads = 0;
Server.IOHandlerOptions.IOCP.WorkOpThreads = 0;
IOCP IOHandler の動作と、そのチューニング方法を解説します。
Indy がデフォルトで行う接続ごとに 1 スレッドという方式ではなく、限られたスレッドプールから数千もの接続を処理します。
IOCP の非同期(オーバーラップ)リクエストに使用するスレッドです。0 にするとプロセッサ数から自動的にサイズが決定されます。Delphi 7 および 2007 では cpucount が利用できないため、デフォルトは 32 です。
必要な場合に接続を同じスレッドに固定します。リクエストは通常プール全体に分散されるため、ある接続への各リクエストは異なるスレッドで実行されることがあります。これが必要な場合にのみゼロより大きい値を設定してください。パフォーマンスとのトレードオフになります。
数千もの接続を処理する必要がある場合に推奨されます。サーバーの上限が同時接続 100 程度であれば、デフォルトの Indy スレッドモデルで十分です。
IOCP は書き込み時にのみソケットの切断を検出します。サーバーが切断を認識して OnDisconnect が発生するように、TsgcWebSocketClient で CleanDisconnect を有効にするか、サーバー側のハートビートを有効にしてください。
このモードが基盤とする仕組みの一次情報源です。
機能リファレンスへのディープリンク、すぐに実行できるデモプロジェクト、そして体験版をダウンロードできます。
| オンラインヘルプ — IOCP sgcWebSockets サーバーで Windows I/O Completion Ports を有効にするための機能リファレンスです。 | 開く | |
| デモプロジェクト — Demos\Server すぐに実行できるサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています — 下記から体験版をダウンロードしてください。 | 開く | |
| ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅した包括的なマニュアルです。 | 開く |