TsgcWebSocketServer_HTTPAPI › Properties › QueueOptions
Serializuje wychodzące wiadomości przez wewnętrzną kolejkę per-połączenie, zapobiegając rywalizacji między wątkami.
property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;
Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone
Po włączeniu wiadomości są umieszczane w wewnętrznej kolejce i wysyłane w kontekście wątku połączenia zamiast wątku wywołującego. Eliminuje to konieczność blokowania, gdy wiele wątków zapisuje do tego samego połączenia jednocześnie. Każdy typ wiadomości (Text, Binary, Ping) jest podobiektem z własną właściwością Level, która nadaje niezależny priorytet: qmNone pomija kolejkę (domyślnie), qmLevel0 jest przetwarzany jako pierwszy, następnie qmLevel1, a na końcu qmLevel2. Na przykład ustawienie Text.Level i Binary.Level na qmLevel2 oraz Ping.Level na qmLevel1 gwarantuje, że pingi są dostarczane przed zwykłym ruchem.
QueueOptions nie jest obsługiwane przez serwer HTTP.sys. Kolejka jest wyłączana w chwili uruchomienia serwera: trzy poziomy są resetowane do qmNone, zdarzenie OnError zgłasza ten fakt, a wiadomości są zapisywane bezpośrednio w wątku wywołującym. Poziom przypisany, gdy serwer już nasłuchuje, jest resetowany w ten sam sposób przy każdym nowym połączeniu. Silnik http.sys jest sterowany zakończeniami operacji IOCP i nie ma pętli dla poszczególnych połączeń, z której można by opróżniać kolejkę, więc wiadomość umieszczona w kolejce nigdy nie dotarłaby do gniazda.
oServer := TsgcWebSocketServer_HTTPAPI.Create(nil);
// QueueOptions is not supported here, the three levels are reset to qmNone on start
oServer.Active := true;