TsgcWebSocketHTTPServer › Özellikler › QueueOptions
İş parçacıkları arasındaki çekişmeyi önlemek için giden mesajları dahili bir bağlantı başına kuyruk aracılığıyla serileştirir.
property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;
Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone, DrainedMode=qdmTransition
Etkinleştirildiğinde, mesajlar dahili bir kuyruğa yerleştirilir ve çağıranın iş parçacığı yerine bağlantı iş parçacığının bağlamında gönderilir. Bu, birden çok iş parçacığı aynı bağlantıya aynı anda yazdığında gereken kilitlemeyi ortadan kaldırır. Her mesaj türü (Text, Binary, Ping), kendi Level özelliğine sahip bir alt nesnedir ve bu özellik bağımsız bir öncelik atar: qmNone kuyruğu atlar (varsayılan), qmLevel0 önce işlenir, ardından qmLevel1 ve son olarak qmLevel2. Örneğin, Text.Level ve Binary.Level öğelerini qmLevel2 ve Ping.Level öğesini qmLevel1 olarak ayarlamak, ping'lerin sıradan trafikten önce teslim edilmesini garanti eder. QueueOptions yalnızca varsayılan IOHandler tarafından desteklenir. IOHandlerOptions.IOHandlerType iohIOCP veya iohEPOLL olduğunda kuyruk, sunucu başlarken kapatılır: üç düzey de qmNone olarak sıfırlanır, OnError olayı bunu bildirir ve iletiler çağıran iş parçacığında satır içi olarak yazılır. Sunucu zaten dinlemedeyken atanan bir düzey, her yeni bağlantıda aynı şekilde sıfırlanır.
DrainedMode, OnQueueDrained olayının ne zaman tetikleneceğini seçer. qdmTransition (varsayılan) ile olay, bir bağlantının giden kuyruğu ileti tutar durumdan boş duruma her geçtiğinde bir kez tetiklenir. qdmEveryPass ile olay, kuyruk zaten boş olsa bile ve Text.Level, Binary.Level ve Ping.Level üçü de qmNone olsa bile, kuyruklar gönderildikten hemen sonra bağlantı döngüsünün her geçişinde tetiklenir; bu nedenle sahte bir kuyruk düzeyine gerek yoktur. Bağlantının kendi iş parçacığında çalışan, bağlantı başına bir kanca olarak kullanışlıdır, örneğin bekleyen uygulama verilerini WriteData ile göndermek için. Olay NotifyEvents ayarını izlemez, bu nedenle işleyici hızlı olmalı ve kullanıcı arayüzüne dokunmamalıdır. Bu döngü yalnızca varsayılan IOHandler'da vardır; iohIOCP ve iohEPOLL ile olay geçiş başına hiçbir zaman tetiklenmez. Her bağlantı, bağlanırken kuyruk seçeneklerini kopyalar, bu nedenle DrainedMode değerini bileşeni etkinleştirmeden önce ayarlayın, zaten açık olan bağlantılar önceki modu korur.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.QueueOptions.Text.Level := qmLevel2;
oServer.QueueOptions.Binary.Level := qmLevel2;
oServer.QueueOptions.Ping.Level := qmLevel1;
oServer.Active := true;