sgcWebSockets 2026.5 — Rate Limiter, Circuit Breaker, API Anahtarları, MCP OAuth & Daha Hızlı IOCP

· Sürümler

sgcWebSockets 2026.5 dolu dolu bir sürüm. Üç yeni altyapı bileşeni, WebSocket / HTTP sunucusunu üretim düzeyinde bir API ağ geçidine dönüştürür: tam donanımlı bir rate limiter, istemci tarafında bir circuit breaker ve tam yaşam döngüsü desteğine sahip bir API anahtarı yöneticisi. Protokol tarafında, genel bir Lightstreamer TLCP 2.5 uygulaması üzerine kurulu yeni bir Forex.com istemcisi vardır; MCP Server, claude.ai gibi tarayıcı tabanlı MCP istemcilerine doğrudan bağlanabilmesi için yerleşik bir OAuth 2.1 akışı kazanır ve IOCP (Windows) ile EPOLL (Linux) G/Ç motorları ölçülebilir altı performans kazanımı elde eder. Ayrıca erken bir post-quantum ilkel öğesi de var: ML-KEM-768 anahtar çifti üretimi için sgcKEM_CreateMLKEM768Keys.

Bu yazı, yeni bileşenler için yapıştırılmaya hazır Delphi parçacıklarıyla öne çıkan özellikleri ele alır.

TsgcWSRateLimiter — tak çalıştır API hız sınırlama

Sunucunuzun yanına bir TsgcWSRateLimiter ekleyin, IP başına, API anahtarı başına, kullanıcı başına veya uç nokta deseni başına token-bucket, sliding-window veya fixed-window hız sınırlamasının yanı sıra günlük/aylık kotalara ve ani artış (burst) korumasına sahip olursunuz. Bileşen iş parçacığı güvenlidir ve durumu diske kalıcı olarak kaydeder (böylece bir sunucu yeniden başlatması her istemciye sıfırdan bir kota vermez).

uses
  sgcWebSocket_Server_RateLimiter;

var
  oRL: TsgcWSRateLimiter;
  oResult: TsgcRateLimitResult;
begin
  oRL := TsgcWSRateLimiter.Create(nil);
  try
    oRL.TokenBucket.Enabled    := True;
    oRL.TokenBucket.Capacity   := 100;     // burst size
    oRL.TokenBucket.RefillRate := 10;      // tokens / interval
    oRL.TokenBucket.RefillIntervalMs := 1000;

    oRL.PerIP.Enabled       := True;
    oRL.PerIP.MaxRequests   := 60;
    oRL.PerIP.WindowSec     := 60;

    // Consume one token for the current request
    oResult := oRL.Consume('ip:' + vClientIP);
    if not oResult.Allowed then
      RespondHTTP(429, 'Retry-After: ' + IntToStr(oResult.RetryAfterSec));
  finally
    oRL.Free;
  end;
end;

Kural çözücü önce PerEndpoint (joker karakterle eşleştirilmiş), ardından PerAPIKey, PerUser ve son olarak PerIP sırasıyla ilerler. OnThrottled, OnQuotaExceeded ve OnStateChange olayları her kararı günlüğe kaydetmenize veya geçersiz kılmanıza olanak tanır.

Demo: Demos\04.WebSocket_Other_Samples\14.RateLimiter — canlı istatistikleri ve reddetme nedenlerini yayımlayan bir sunucuya karşı sel (flood) üreten bir istemci çalıştırır.

TsgcWSCircuitBreaker — istemci tarafında hata yalıtımı

Bir yukarı akış API'si (api.openai.com, bir ödeme ağ geçidi, dahili bir mikro hizmet) hata vermeye veya yavaşlamaya başladığında, TCP zaman aşımlarında takılı kalmak size bağlantılara, iş parçacıklarına ve paraya mal olur. TsgcWSCircuitBreaker, herhangi bir TsgcHTTPAPI_client alt sınıfının üzerine klasik üç durumlu deseni (closed / open / half-open) uygular; kayan bir zaman penceresi, yavaş çağrı algılama, isteğe bağlı geri dönüş (fallback) yanıtları ve uç nokta başına geçersiz kılmalar ile.

uses
  sgcWebSocket_CircuitBreaker;

var
  oCB: TsgcWSCircuitBreaker;
begin
  oCB := TsgcWSCircuitBreaker.Create(nil);
  try
    oCB.Thresholds.FailureCount        := 5;
    oCB.Thresholds.FailureRatePercent  := 50;
    oCB.Thresholds.SlowCallDurationMs  := 2000;
    oCB.Thresholds.SlowCallRatePercent := 80;
    oCB.TimeWindow.RollingWindowSec    := 60;
    oCB.Recovery.CooldownSec           := 30;
    oCB.Recovery.HalfOpenTrialCalls    := 3;

    oCB.Fallback.Enabled        := True;
    oCB.Fallback.UseLastSuccess := True;

    if oCB.IsCallAllowed('openai') then
    try
      vResponse := oOpenAI.ChatCompletion(...);
      oCB.RecordSuccess('openai');
    except
      on E: Exception do
      begin
        oCB.RecordFailure('openai', E.ClassName);
        raise;
      end;
    end
    else
      vResponse := 'service temporarily unavailable';
  finally
    oCB.Free;
  end;
end;

Delphi 2009+ üzerinde tek satırlık bir sarmalayıcı da mevcuttur: oCB.Execute('openai', procedure begin oOpenAI.ChatCompletion(...) end); — başarı / başarısızlık kaydı otomatik olarak gerçekleşir.

Demo: Demos\04.WebSocket_Other_Samples\15.CircuitBreaker.

TsgcWSAPIKeyManager — tek bileşende anahtar yaşam döngüsü

Çoğu "WebSocket API" sunucusunun API anahtarlarına ihtiyacı vardır: oluşturma, doğrulama, iptal, döndürme. TsgcWSAPIKeyManager, kapsam tabanlı yetkilendirme, beklemede isteğe bağlı karma (hashing), sona erme, bir denetim günlüğü ve yerleşik bir döndürme tolerans süresi ile tüm yaşam döngüsünü sarmalar; böylece eski anahtarlar döndürmeden sonra yapılandırılabilir bir süre boyunca çalışmaya devam eder.

uses
  sgcWebSocket_Server_APIKeyManager;

var
  oKM: TsgcWSAPIKeyManager;
  vKey, vNewKey: string;
begin
  oKM := TsgcWSAPIKeyManager.Create(nil);
  try
    oKM.Generation.Length := 40;
    oKM.Generation.Prefix := 'sgc_';
    oKM.Hashing.Enabled   := True;        // store SHA-256 hash, not the plaintext
    oKM.Rotation.GracePeriodSec := 86400; // old key valid for 24h after rotation
    oKM.Expiration.DefaultTTLSec := 30 * 86400;

    // Issue a key for tenant "acme" with read+write scopes, expiring in 7 days
    vKey := oKM.IssueKey('acme', ['read', 'write'], 7 * 86400);

    // Validate the key on each request, optionally requiring a scope
    if not oKM.ValidateKey(vKey, 'read', vClientIP) then
      RespondHTTP(401, 'invalid api key');

    // Rotate a key (returns the new plaintext; old key remains valid for GracePeriodSec)
    oKM.RotateKey(vKey, vNewKey);
  finally
    oKM.Free;
  end;
end;

Bileşen, anahtarı IsRequestAuthorized ile doğrudan gelen HTTP başlıklarından veya query string'den okuyabilir, böylece çıkarma işlemini kendiniz bağlamak zorunda kalmazsınız.

Demo: Demos\04.WebSocket_Other_Samples\16.APIKeyManager.

Forex.com istemcisi + genel Lightstreamer

Yeni TsgcWSAPI_Forex istemcisi, Forex.com'a birleşik REST + akış erişimi sunar (login, ping, market watch, pozisyonlar, emirler, işlem geçmişi, işlem simülasyonu). create_session, bind_session, control (subscribe / unsubscribe) ve yeniden bağlanma sonrası LOOP otomatik yeniden bağlama + abonelik tekrarını uygulayan genel bir Lightstreamer TLCP 2.5 istemcisi olan yepyeni bir TsgcWSPClient_Lightstreamer bileşeni üzerine kuruludur. Lightstreamer istemcisi tek başına yeniden kullanılabilir, dolayısıyla aynı kod tabanı IG Markets ve Lightstreamer destekli diğer her beslemeyle çalışır.

uses sgcHTTP_API_Forex;

var oFX: TsgcWSAPI_Forex;
begin
  oFX := TsgcWSAPI_Forex.Create(nil);
  oFX.UserName  := 'demo-user';
  oFX.Password  := 'secret';
  oFX.AppKey    := 'your-app-key';
  oFX.Login;
  oFX.SubscribePrices(['EUR/USD', 'GBP/USD', 'XAU/USD']);
  oFX.OnPriceUpdate := procedure(const aSymbol: string; aBid, aAsk: Double)
                      begin
                        ShowMessage(Format('%s %.5f / %.5f', [aSymbol, aBid, aAsk]));
                      end;
end;

Tam bir GUI demosu Demos\05.Crypto\22.Forex içinde bulunur — login, bağlantı ping'i, canlı market watch, pozisyonlar, aktif emirler, işlem geçmişi, stop / limit geçmişi ve işlem simülasyonu; kimlik bilgileri sgcForexDemo.ini dosyasına kalıcı olarak kaydedilir.

MCP Server — tarayıcı tabanlı MCP istemcileri için OAuth 2.1

MCP Server artık harici bir yetkilendirme sunucusu olmadan tarayıcı tabanlı MCP bağlayıcılarıyla (claude.ai gibi) doğrudan iletişim kurabilir. MCP tarayıcı-bağlayıcı spesifikasyonunun gerektirdiği dört OAuth keşif / kayıt uç noktasını otomatik olarak yayımlar, bir HTML onay ekranıyla bir PKCE-S256 yetkilendirme akışı çalıştırır ve yenileme tokenları verir:

CORS satır içinde ele alınır: OPTIONS ön kontrolü, kimlik doğrulamadan önce tam Access-Control-* başlıklarıyla 204 döndürür, her yanıt istek kaynağının bir Access-Control-Allow-Origin yansımasını ve bir Strict-Transport-Security: max-age=31536000 HSTS başlığını taşır.

IOCP ve EPOLL: altı ayarlama kazanımı

Windows IOCP ve Linux EPOLL G/Ç motorları, performans ve ayarlanabilirlik açısından odaklanmış bir çalışma turu gördü.

IOCP (Windows)

oServer.Bindings.Add.Port := 443;
oServer.IOHandler := TsgcIndy_IOHandler_IO_IOCP.Create(oServer);
with TsgcIndy_IOHandler_IO_IOCP(oServer.IOHandler) do
begin
  SendBufferSize    := 256 * 1024;
  ReceiveBufferSize := 256 * 1024;
  TCPNoDelay        := True;
  Engine.ThreadAffinity := True;
end;

EPOLL (Linux)

Paylaşılan

IOCP / EPOLL çalışan havuzu, bir görev işlendikten hemen sonrası dahil her yinelemede sleep(1) çağırıyordu — bu da kuyruk dolu olsa bile her çalışanı etkili biçimde ~1.000 işlem/sn ile sınırlıyordu. Uyku artık bekleyen iş varken atlanıyor, böylece bu sınır kaldırıldı.

HTTP.sys: isteğe bağlı yüksek performans modu

HTTP.sys sunucusu, bir OperatingMode seçicisine sahip bir FineTune özelliği kazanır. Varsayılan ompClassic mevcut davranışı korur. Yeni ompHighPerf modu, yüksek verimli HTTP.sys dağıtımları için önerilen mimari olan MSDN N-çalışan × M-önceden-gönderilmiş-async-alım desenini tek bir özelliğin arkasında uygular:

oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.HTTP2Options.SecureOptions.HTTPAPI := True;   // use HTTP.sys
oServer.FineTune.OperatingMode := ompHighPerf;
oServer.FineTune.WorkerCount   := 8;
oServer.FineTune.PrePostedReceivesPerWorker := 16;
oServer.Active := True;

THttpServerRequest ve THttpServerResponse de, daha önce yalnızca manuel ayrıştırma yoluyla elde edilebilen ayrıntıları kapsayan ek alanlarla genişletildi.

Post-quantum ilkel öğe: ML-KEM-768

Küçük ama ileriye dönük bir ekleme: sgcKEM_CreateMLKEM768Keys, hem PEM hem de ham bayt biçiminde bir ML-KEM-768 (FIPS 203 / Kyber-768) anahtar çifti üretir. ML-KEM, NIST tarafından standartlaştırılan ve hibrit TLS 1.3 (X25519MLKEM768) için IETF yol haritasında yer alan post-quantum KEM'dir. Bu, yaklaşan OpenSSL 3.5 / 3.6 temelinden önce PQ'ye hazır el sıkışmalarıyla deney yapmanın önünü açar.

uses sgcKEM;

var vPubPEM, vPrivPEM: string; vPubRaw, vPrivRaw: TBytes;
begin
  sgcKEM_CreateMLKEM768Keys(vPubPEM, vPrivPEM, vPubRaw, vPrivRaw);
  TFile.WriteAllText('mlkem768_pub.pem', vPubPEM);
  TFile.WriteAllText('mlkem768_priv.pem', vPrivPEM);
end;

Güvenilirlik ve uyumluluk düzeltmeleri

Hata düzeltme paketi, uzun bir MCP, HTTP.sys, IOCP ve HTTP/2 sorunları listesini kapatır. Öne çıkanlar:

Yükseltme

2026.5, mevcut 2026.4 projeleri için tak çalıştır bir yükseltmedir. Mevcut bileşenlerde herhangi bir arayüz değişikliği yapılmadı; yeni rate-limit / circuit-breaker / API-anahtarı bileşenleri eklemelidir ve isteğe bağlıdır. HTTP.sys yüksek performans modu FineTune.OperatingMode := ompHighPerf arkasında kapalıdır — mevcut kod klasik yolda kalır.

Aktif aboneliği olan müşteriler yeni derlemeyi müşteri alanından indirebilir. Deneme kullanıcıları güncellenmiş yükleyiciyi şu adresten edinebilir: esegece.com/products/sgcwebsockets/sgcwebsockets-download.

Sorular, geri bildirim veya geçiş yardımı mı? Bize ulaşın — kodu yazan kişilerden bir yanıt alacaksınız.