TsgcWebSocketServer › Właściwości › 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=qmNone, Binary=qmNone, Ping=qmNone, MaxQueueSize=0, OverflowPolicy=qopDropOldest
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, co eliminuje konieczność blokowania potrzebnego, gdy kilka wątków zapisuje do tego samego połączenia jednocześnie. Każdy typ wiadomości (Text, Binary, Ping) może mieć przypisany niezależny poziom priorytetu: qmNone pomija kolejkę (domyślnie), qmLevel1 jest przetwarzany jako pierwszy, następnie qmLevel2, a na końcu qmLevel3. Na przykład ustawienie Text i Binary na qmLevel2, a Ping na qmLevel1 gwarantuje, że pingi są dostarczane przed zwykłym ruchem. QueueOptions nie jest obsługiwane, gdy IOHandlerOptions jest ustawione na iohIOCP.
MaxQueueSize ogranicza liczbę wiadomości, jaką może przechowywać każda kolejka przypisana do połączenia: zero (domyślnie) oznacza brak ograniczenia, zachowując dotychczasowe zachowanie. Po osiągnięciu limitu OverflowPolicy decyduje, co dzieje się z nowymi wiadomościami: qopDropOldest (domyślnie) odrzuca najstarszą wiadomość z kolejki, aby zrobić miejsce, qopDropNewest odrzuca nową wiadomość, a qopDisconnect odrzuca ją i zamyka połączenie. Za każdym razem, gdy limit zostaje osiągnięty, najpierw wywoływane jest zdarzenie OnSendBufferFull, co pozwala aplikacji wykrywać powolnych konsumentów lub anulować odrzucenie.
oServer := TsgcWebSocketServer.Create(nil);
oServer.QueueOptions.Text := qmLevel2;
oServer.QueueOptions.Binary := qmLevel2;
oServer.QueueOptions.Ping := qmLevel1;
oServer.Active := true;