TsgcWebSocketServer_HTTPAPI속성 › QueueOptions

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.LevelBinary.LevelqmLevel2로, Ping.LevelqmLevel1로 설정하면 ping이 일반 트래픽보다 먼저 전달됨을 보장합니다.

QueueOptions는 HTTP.sys 서버에서 지원되지 않습니다. 서버가 시작될 때 큐가 꺼집니다. 세 가지 수준이 모두 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;

속성으로 돌아가기