TsgcWebSocketServer속성 › QueueOptions

QueueOptions 속성

스레드 간 경합을 방지하기 위해 내부 연결별 큐를 통해 발신 메시지를 직렬화합니다.

구문

property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;

기본값

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

설명

활성화되면 메시지가 내부 큐에 배치되고 호출자의 스레드 대신 연결 스레드의 컨텍스트에서 전송됩니다. 이렇게 하면 여러 스레드가 동일한 연결에 동시에 쓸 때 필요한 잠금이 제거됩니다. 각 메시지 유형(Text, Binary, Ping)에 독립적인 우선순위 수준을 할당할 수 있습니다. qmNone은 큐를 건너뛰고(기본값), qmLevel1이 먼저 처리되고, 그 다음 qmLevel2, 마지막으로 qmLevel3이 처리됩니다. 예를 들어 TextBinaryqmLevel2로, PingqmLevel1로 설정하면 ping이 일반 트래픽보다 먼저 전달되는 것이 보장됩니다. IOHandlerOptionsiohIOCP로 설정된 경우 QueueOptions는 지원되지 않습니다.

MaxQueueSize는 연결별 큐가 보유할 수 있는 메시지 수를 제한합니다. 0(기본값)은 무제한을 의미하며 이전 동작을 유지합니다. 제한에 도달하면 OverflowPolicy가 새 메시지의 처리 방식을 결정합니다. qopDropOldest(기본값)는 공간을 확보하기 위해 가장 오래된 큐 메시지를 버리고, qopDropNewest는 새 메시지를 버리며, qopDisconnect는 메시지를 버리고 연결을 닫습니다. 제한에 도달할 때마다 OnSendBufferFull 이벤트가 먼저 발생하므로 애플리케이션이 느린 소비자를 감지하거나 메시지 폐기를 재정의할 수 있습니다.

예제


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

속성으로 돌아가기