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