TsgcWebSocketServer › イベント › OnSendBufferFull
クライアント接続の送信キューが QueueOptions.MaxQueueSize に達したときに、オーバーフローポリシーが適用される前に発生します。
property OnSendBufferFull: TsgcWSSendBufferFullEvent;
// TsgcWSSendBufferFullEvent = procedure(Connection: TsgcWSConnection; const QueueSize: Integer; var DropMessage: Boolean) of object
—
メッセージキューイングが有効で、かつ QueueOptions.MaxQueueSize がゼロより大きい場合にのみ発生します。キューにすでに MaxQueueSize 件のメッセージが保持されている接続に対して新たなメッセージがキューに追加されようとするたびに、影響を受ける Connection と現在の QueueSize を伴ってこのイベントが発生します。DropMessage は True として渡されます。そのままにすると、QueueOptions.OverflowPolicy が動作を決定します(qopDropOldest はキュー内の最も古いメッセージを破棄し、qopDropNewest は新しいメッセージを破棄し、qopDisconnect は新しいメッセージを破棄して接続を閉じます)。False に設定すると、メッセージをそのまま受け入れ、キューが制限を超えて増加することを許可します。このイベントを使用すると、低速なコンシューマーがサーバーのメモリを使い果たす前に検出できます。
procedure OnSendBufferFull(Connection: TsgcWSConnection; const QueueSize: Integer;
var DropMessage: Boolean);
begin
WriteLn('#slow consumer ' + Connection.Guid + ': ' + IntToStr(QueueSize) + ' messages queued');
end;