TsgcWebSocketServerÖzellikler › QueueOptions

QueueOptions Özellik

İş parçacıkları arasındaki çekişmeyi önlemek için giden mesajları dahili bir bağlantı başına kuyruk aracılığıyla serileştirir.

Sözdizimi

property QueueOptions: TsgcWSQueueServer_Options read FQueueOptions write SetQueueOptions;

Varsayılan Değer

Text.Level=qmNone, Binary.Level=qmNone, Ping.Level=qmNone, MaxQueueSize=0, OverflowPolicy=qopDropOldest

Remarks

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.

MaxQueueSize, bağlantı başına her kuyruğun tutabileceği ileti sayısını sınırlar: sıfır (varsayılan) sınırsız anlamına gelir ve önceki davranışı korur. Sınıra ulaşıldığında yeni iletilere ne olacağına OverflowPolicy karar verir: qopDropOldest (varsayılan) yer açmak için kuyruktaki en eski iletiyi atar, qopDropNewest yeni iletiyi atar, qopDisconnect iletiyi atar ve bağlantıyı kapatır. Sınıra her ulaşıldığında önce OnSendBufferFull olayı tetiklenir; böylece uygulama yavaş tüketicileri tespit edebilir veya iletinin atılmasını geçersiz kılabilir.

Örnek


oServer := TsgcWebSocketServer.Create(nil);
oServer.QueueOptions.Text.Level := qmLevel2;
oServer.QueueOptions.Binary.Level := qmLevel2;
oServer.QueueOptions.Ping.Level := qmLevel1;
oServer.Active := true;

Özelliklere Dön