TsgcWebSocketServer_HTTPAPI › プロパティ › QueueOptions
スレッド間の競合を防ぐために、内部の接続ごとのキューを通じてアウトバウンドメッセージをシリアライズします。
property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;
Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone
有効な場合、メッセージは内部キューに配置され、呼び出し元のスレッドではなく接続スレッドのコンテキストで送信されます。これにより、複数のスレッドが同じ接続に同時に書き込む際に必要なロックが不要になります。各メッセージタイプ(Text、Binary、Ping)は、独立した優先度を割り当てる独自の Level プロパティを持つサブオブジェクトです: qmNone はキューをスキップします(デフォルト)、qmLevel0 が最初に処理され、次に qmLevel1、最後に qmLevel2 が処理されます。例えば、Text.Level と Binary.Level を qmLevel2 に、Ping.Level を qmLevel1 に設定すると、ping が通常のトラフィックより先に配信されることが保証されます。
QueueOptions は HTTP.sys サーバーではサポートされません。サーバーの起動時にキューは無効化されます。3 つのレベルは qmNone にリセットされ、OnError イベントがそれを報告し、メッセージは呼び出し元スレッド上でインラインに書き込まれます。サーバーがすでにリッスンを開始した後に割り当てられたレベルも、新しい接続ごとに同じ方法でリセットされます。http.sys エンジンは IOCP の完了通知で駆動され、キューを排出するための接続ごとのループを持たないため、キューに入れられたメッセージがソケットに届くことはありません。
oServer := TsgcWebSocketServer_HTTPAPI.Create(nil);
// QueueOptions is not supported here, the three levels are reset to qmNone on start
oServer.Active := true;