TsgcWebSocketServerプロパティ › QueueOptions

QueueOptions プロパティ

スレッド間の競合を防ぐために、内部の接続ごとのキューを通じてアウトバウンドメッセージをシリアライズします。

構文

property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;

デフォルト値

Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone, MaxQueueSize=0, OverflowPolicy=qopDropOldest

解説

有効にすると、メッセージは内部キューに入れられ、呼び出し元のスレッドではなく接続スレッドのコンテキストで送信されます。これにより、複数のスレッドが同じ接続に同時書き込みを行う際に必要なロックが不要になります。各メッセージタイプ(TextBinaryPing)は、独立した優先度を割り当てる独自の Level プロパティを持つサブオブジェクトです。qmNone はキューをスキップし(デフォルト)、qmLevel0 が最初に処理され、次に qmLevel1、最後に qmLevel2 の順に処理されます。例えば、Text.LevelBinary.LevelqmLevel2 に、Ping.LevelqmLevel1 に設定すると、通常のトラフィックよりもピングが先に配信されることが保証されます。QueueOptions はデフォルトの IOHandler でのみサポートされます。IOHandlerOptions.IOHandlerTypeiohIOCP または iohEPOLL の場合、サーバーの起動時にキューは無効化されます。3 つのレベルは qmNone にリセットされ、OnError イベントがそれを報告し、メッセージは呼び出し元スレッド上でインラインに書き込まれます。サーバーがすでにリッスンを開始した後に割り当てられたレベルも、新しい接続ごとに同じ方法でリセットされます。

MaxQueueSize は、接続ごとの各キューが保持できるメッセージ数を制限します。ゼロ(デフォルト)は無制限を意味し、以前の動作が維持されます。制限に達すると、OverflowPolicy が新しいメッセージの扱いを決定します。qopDropOldest(デフォルト)は空きを作るためにキュー内の最も古いメッセージを破棄し、qopDropNewest は新しいメッセージを破棄し、qopDisconnect は新しいメッセージを破棄して接続を閉じます。制限に達するたびに、まず OnSendBufferFull イベントが発生するため、アプリケーションは低速なコンシューマーを検出したり、破棄を上書きしたりできます。

使用例


oServer := TsgcWebSocketServer.Create(nil);
oServer.QueueOptions.Text.Level := qmLevel2;
oServer.QueueOptions.Binary.Level := qmLevel2;
oServer.QueueOptions.Ping.Level := qmLevel1;
oServer.Active := true;

プロパティに戻る