TsgcWebSocketClient › Właściwości › QueueOptions
Kolejkuje wychodzące wiadomości tekstowe, binarne i Ping, aby były serializowane na wątku połączenia.
property QueueOptions: TsgcWSQueueClient_Options read FQueueOptions write SetQueueOptions;
Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone, MaxQueueSize=0, OverflowPolicy=qopDropOldest, DrainedMode=qdmTransition
Domyślnie wiadomości są zapisywane bezpośrednio w wątku wywołującym. Przypisanie poziomu kolejki (qmLevel0, qmLevel1 lub qmLevel2) kolejkuje je i wysyła sekwencyjnie z wątku połączenia, unikając blokad gdy kilka wątków jednocześnie wywołuje WriteData lub Ping. Wiadomości na poziomie qmLevel0 są przetwarzane przed qmLevel1, a qmLevel1 przed qmLevel2, więc kategorie o wyższym priorytecie (na przykład ping) mogą być dostarczane przed ładunkami.
MaxQueueSize ogranicza liczbę wiadomości, jaką może przechowywać kolejka: 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 monitorować przeciążenie (backpressure) lub anulować odrzucenie.
DrainedMode określa, kiedy jest wywoływane zdarzenie OnQueueDrained. Przy qdmTransition (domyślnie) zdarzenie jest wywoływane raz za każdym razem, gdy kolejka wychodząca połączenia przechodzi ze stanu zawierającego wiadomości do pustego. Przy qdmEveryPass jest wywoływane w każdym przebiegu pętli połączenia, zaraz po wysłaniu kolejek, nawet gdy kolejka była już pusta oraz nawet gdy Text.Level, Binary.Level i Ping.Level mają wartość qmNone, więc nie jest potrzebny sztuczny poziom kolejki. Jest to przydatne jako haczyk dla poszczególnych połączeń, wykonywany we własnym wątku połączenia, na przykład do wysyłania oczekujących danych aplikacji za pomocą WriteData. Zdarzenie nie podlega ustawieniu NotifyEvents, więc procedura obsługi musi być szybka i nie może dotykać interfejsu użytkownika. Każde połączenie kopiuje opcje kolejki w chwili nawiązania, więc ustaw DrainedMode przed aktywacją komponentu, połączenia już otwarte zachowują poprzedni tryb.
oClient := TsgcWebSocketClient.Create(nil);
oClient.URL := 'wss://www.esegece.com:2053';
oClient.QueueOptions.Ping.Level := qmLevel1;
oClient.QueueOptions.Text.Level := qmLevel2;
oClient.QueueOptions.Binary.Level := qmLevel2;
oClient.Active := true;