sgcWebSockets 2026.8, yılın en büyük sürümü. Dört yeni taşıma bileşeni var, hem istemci hem de sunucu tarafında QUIC ve HTTP/3 geliyor, OpenSSL artık çalıştırılabilir dosyanızın içine bağlanabiliyor, böylece bir TLS uygulaması tek bir DLL olmadan dağıtılıyor, ve sgcHTML otuzdan fazla bileşen kazanıyor, bir WebBroker ve DataSnap dağıtıcısı ediniyor ve telefon ekranına uyum sağlıyor.
Alt tarafta, SChannel TLS katmanı parçalarına ayrıldı ve yeniden inşa edildi. Windows TLS yığınını kullanıyorsanız, kurmanız gereken sürüm bu: TLSOptions.Version sessizce yok sayılıyordu, iptal edilmiş bir sertifika kabul ediliyordu, bir TLS 1.3 bağlantısı hiçbir zaman tamamlanmıyordu ve bir yeniden anlaşma sertifikayı hiçbir denetim yapmadan değiştiriyordu. Bunların hepsi düzeltildi, ayrıca iptal denetimi, bir sürüm alt sınırı ve sunucuda istemci sertifikası doğrulaması artık kullanılabilir durumda. Bu yazının geri kalanı rehberli bir tur, ve her bölüm özelliği ayrıntılı olarak anlatan makaleye bağlantı veriyor.
QUIC ve HTTP/3
Dört yeni bileşen QUIC (RFC 9000) ve HTTP/3 (RFC 9114) desteğini Delphi ve C++ Builder'a getiriyor: TsgcQUICClient, TsgcQUICServer, TsgcHTTP3Client ve TsgcHTTP3Server. Bunlar yerel OpenSSL 3.5 QUIC motoru üzerinde çalışır, yani dağıtılacak üçüncü taraf bir yığın yoktur, ve el sıkışmanın içine katlanmış TLS 1.3, hat başı tıkanması olmayan çoğullanmış akışlar, 0-RTT devam ettirme ve istemci ağ değiştirdiğinde bağlantı göçü elde edersiniz.
uses
sgcQUIC_Client;
var
oClient: TsgcQUICClient;
begin
oClient := TsgcQUICClient.Create(nil);
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.OnQUICConnect := OnQUICConnect;
oClient.OnQUICStreamData := OnQUICStreamData;
oClient.Active := True; // TLS 1.3 handshake in a single flight
oClient.WriteData('ping'); // send bytes on a QUIC stream
end;
HTTP/3 istemcisi her HTTP fiilini konuşur, QPACK başlık sıkıştırması yapar, bloklayan ya da eşzamansız biçimde çalışır, bir HTTP/3 uç noktasını Alt-Svc üzerinden keşfeder ve sunucu göndermelerini işler.
uses
sgcHTTP3_Client;
var
oClient: TsgcHTTP3Client;
vBody: string;
begin
oClient := TsgcHTTP3Client.Create(nil);
oClient.OnResponse := OnResponse;
oClient.OnAltSvc := OnAltSvc;
oClient.Connect('www.example.com', 443);
vBody := oClient.Get('https://www.example.com/');
end;
Her ikisi de sgcWebSockets Enterprise ile birlikte sgcQUIC paketini gerektirir. Daha fazlası: QUIC İstemci ve Sunucu Bileşenleri ve HTTP/3 İstemci ve Sunucu Bileşenleri.
Çalıştırılabilir dosyanın içinde OpenSSL
libcrypto ve libssl dosyalarını uygulamanın yanında dağıtmak, bir TLS istemcisi yayınlamanın her zaman en keyifsiz kısmı olmuştur. 2026.8 ile birlikte kütüphane OpenSSL 3.5.7 sürümünü statik olarak bağlayabiliyor: projenizin uses bölümüne tek bir birim ekleyin, DLL'ler ortadan kalksın. Birimi kaldırın, DLL'ler tam olarak eskisi gibi yeniden yüklensin, yani tercih her iki yönde de tek satırlık bir değişiklik.
uses
sgcWebSocket, sgcWebSocket_Classes,
sgcIdSSLOpenSSL_Static;
Delphi XE2 sürümünden itibaren istemcileri ve sunucuları, 32 ve 64 bit olarak kapsar. Daha fazlası: Statik OpenSSL Bağlama, Artık DLL Yok.
sgcHTML: WebBroker, DataSnap ve otuz yeni bileşen
sgcHTML sayfaları artık sgcWebSockets sunucusuna bağlı değil. Yeni bir dağıtıcı bileşen, bu sayfaları herhangi bir WebBroker uygulamasından (bağımsız, ISAPI, Apache ya da CGI) ve DataSnap sunucularından sunar, orada köprü REST uç noktalarınızla aynı bağlantı noktası üzerinde canlı WebSocket güncellemeleri ekler.
uses
Web.HTTPApp, sgcHTMX_Engine_Server_WebBroker, sgcHTMX_Router;
// Any WebBroker host: the engine's Owner is the web module,
// so the standard WebBroker dispatcher calls it automatically
FEngine := TsgcHTMX_Engine_Server_WebBroker.Create(WebModule1);
FEngine.Router := FRouter; // your htmx routes and the page
Bileşen kümesi bu sürümde epeyce büyüdü, ve her şey hâlâ sunucuda çiziliyor, yüklenecek istemci tarafı bir kütüphane yok:
- Veri. TreeGrid, PivotTable, ActivityFeed ve yeniden boyutlandırılabilir bir Splitter, ayrıca Excel dışa aktarımı, her satırın altında bir ayrıntı paneli ve Grid üzerinde hatırlanan sütun ve sıralama tercihleri. Daha fazlası: Yapılandırılmış Veri için Dört Yeni sgcHTML Bileşeni.
- Görseller. Heatmap, Sparkline, CandlestickChart ve TreeMap, ayrıca QRCode ve Barcode, hepsi satır içi SVG olarak çiziliyor. Daha fazlası: Altı Yeni sgcHTML Görseli.
- Formlar. MultiSelect, ColorPicker, Slider, TimePicker, SignaturePad ve Transfer, tarih-saat ve tarih aralığı seçicileriyle birlikte. Daha fazlası: Altı Yeni sgcHTML Form Girdisi.
- Geri bildirim. Badge, PDFViewer, ContextMenu, ProgressBar, JobProgress ve LogViewer. Daha fazlası: Altı Yeni sgcHTML Geri Bildirim Bileşeni.
- Yönetim. Presence, RolesPermissions ve UserManagement. Bunlar yalnızca ekranı çizer, her kullanıcının ne yapabileceğine hâlâ kendi sunucunuz karar verir. Daha fazlası: Üç Yeni sgcHTML Yönetim Bileşeni.
Sayfalar artık ekran boyutuna da uyum sağlıyor. Telefonda yan menü bir düğmenin arkasına katlanır ve içerik tam genişliği kullanır, masaüstünde hiçbir şey değişmez. Önceki sabit yerleşim için yeni Responsive özelliğini False yapın. Daha fazlası: WebBroker ve DataSnap Üzerinde sgcHTML.
SChannel TLS elden geçirmesi
SChannel, Windows TLS yığınıdır, hiç OpenSSL dağıtmadan elde ettiğiniz yığın. Dışarıdan görünmeyen bir dizi sorunu vardı, ki bu sorunların en kötü türüdür. TLSOptions.Version Windows 11 ve Windows Server 2022 üzerinde hiç okunmuyordu, Windows 10 üzerinde TLS 1.3 istemek size sessizce TLS 1.2 veriyordu, ve sürümü tanımsız bırakmak SSL 3.0, TLS 1.0 ve TLS 1.1 desteğini yeniden açıyordu. İptal edilmiş bir sunucu sertifikası, VerifyCertificate True olarak ayarlanmış olsa bile kabul ediliyordu, çünkü zincir herhangi bir iptal durumu sorulmadan kuruluyordu. Bir yeniden anlaşmanın ardından yeni bir sertifika, zincir ya da makine adı denetlenmeden kabul ediliyordu. Indy'nin yan tarafta açtığı bağlantılar, yani başka bir makineye HTTP yönlendirmesi ya da bir FTP veri kanalı, boş bir yapılandırmayla geri dönüyordu, dolayısıyla doğrulama kapalı çalışıyorlardı ve bunu hiçbir şey bildirmiyordu.
Bunların tümü düzeltildi, anlaşılan sürüm artık el sıkışma tamamlandığında denetleniyor, ve bu çalışmayla birlikte üç yeni seçenek grubu geldi: iptal denetimi, bir sürüm alt sınırı ve Windows güçlü kriptografisi.
// client
oClient.TLSOptions.Version := tls1_3; // highest version to use
oClient.TLSOptions.SChannel_Options.VersionMin := tls1_2; // lowest accepted
oClient.TLSOptions.SChannel_Options.UseStrongCrypto := True;
oClient.TLSOptions.SChannel_Options.Revocation.Check := scrcChainExcludeRoot;
oClient.TLSOptions.SChannel_Options.Revocation.Timeout := 5000; // ms
// or all of it in one line
oClient.TLSOptions.Preset := tlspSecureDefaults;
İptal varsayılanları bilinçli olarak hoşgörülüdür: IgnoreRevocationOffline ve IgnoreNoRevocationCheck True'dur, böylece denetimi açmak eskiden çalışan bir bağlantıyı bozamaz, ve Timeout değeri CRL ve OCSP getirme işlemini sınırlar, böylece erişilemeyen bir yanıtlayıcı el sıkışmayı askıda bırakamaz. Gerçekten iptal edilmiş bir sertifika her zaman reddedilir.
Sunucu tarafında SChannel artık istemciden bir sertifika isteyebiliyor, ki bunu daha önce hiç yapmıyordu. İstemci sertifikası, bir istemcinin sunucu sertifikasına uyguladığı denetimlerin aynısından geçer, yani zincir, tarihler ve OnSChannelVerifyPeer olayı, makine adı denetimi olmadan.
oServer.SSLOptions.VerifyCertificate := True;
oServer.SSLOptions.VerifyCertificate_Options.FailIfNoCertificate := True;
İki düzeltme daha buraya ait. SChannel kullanan bir istemci, karşı taraf bağlantıyı bir kapatma bildirimi olmadan düşürdüğünde (bir vekil sunucu yeniden başladığında olduğu gibi) bağlantının gittiğini hiç fark etmiyordu, dolayısıyla OnDisconnect hiç tetiklenmiyor ve WatchDog hiç çalışmıyordu. Ayrıca bir TLS 1.3 bağlantısı hiçbir zaman tamamlanmıyordu, çünkü sunucunun el sıkışmanın hemen ardından gönderdiği oturum bileti, istemciyi sunucunun zaten göndermiş olduğu veriyi beklerken bırakıyordu. El sıkışma artık yalnızca TCP bağlanmasını kapsamak yerine ConnectTimeout değerine uyuyor, ve kapatmadan önce bir kapatma bildirimi gönderiliyor, SChannel, Apple ve Android bağlantılarının hepsinde.
Sunucu sınırları ve IOCP / EPOLL motorları
Sunucular, eskiden sınırsız olan bir dizi sınır kazandı. WebSocket sunucusu artık sınırsız sayı yerine varsayılan olarak 10.000 eşzamanlı bağlantı kabul ediyor, ve bir istemcinin saniyede kaç denetim çerçevesi gönderebileceğini sınırlıyor (100), böylece ping yağmuruna tutulamıyor. HTTP/2 sunucusu MaxRequestSize özelliğini, DTLS bileşeni ise MaxConnections, HandshakeTimeout ve IdleTimeout özelliklerini kazandı, böylece uydurma adreslerden gelen tek paketlik bir sel artık sunucunun belleğini doldurmuyor. Bunların her biri yükseltilebilir ya da önceki davranış için 0 yapılabilir.
Yüksek başarımlı motorlar uzun bir onarım listesi aldı: çeşitli temizlik yollarında bellek ve tanıtıcı sızıntıları ile çökmeler, kabul edilir edilmez hattı düşüren bir istemci, sunucu temizliğin ortasında durdurulduğunda iki kez serbest bırakılan bir bağlantı, çalışan iş parçacıkları etkinken serbest bırakma sonrası kullanım, ve işlenen her iletide kaybedilen bir tampon. HTTP keep-alive hiç çalışmıyordu, dolayısıyla bağlantı her istekten sonra kapatılıyor ve sunucu TIME_WAIT durumundaki soketlerle doluyordu. Linux üzerinde her HTTP isteği, ayrıştırılmış isteğin parçalarını sızdırıyordu, ve tüm çalışanlar tek bir bağlantı kuyruğunu paylaşıyordu, bu yüzden bir ya da iki iş parçacığı işin neredeyse tamamını yapıyordu.
İki yeni seçenek işi tamamlıyor, ikisi de varsayılan olarak kapalı: keep-alive yoklamaları ve bir boşta kalma zaman aşımı, böylece yarı açık soketler artık birikmiyor, ve yeni bağlantıların çalışan iş parçacıklarına sırayla dağıtılması.
Server.IOHandlerOptions.IOHandlerType := iohEPOLL;
Server.IOHandlerOptions.EPOLL.TCPKeepAlive.Enabled := True;
Server.IOHandlerOptions.EPOLL.TCPKeepAlive.Time := 60; // seconds idle before probing
Server.IOHandlerOptions.EPOLL.TCPKeepAlive.Interval := 10; // seconds between probes
Server.IOHandlerOptions.KeepAliveTimeout := 120; // seconds
Daha fazlası: IOCP ve EPOLL Sunucuları için TCPKeepAlive ve KeepAliveTimeout. Motor düzeltmelerinin birçoğunun dayandığı yamayı katkı olarak sunduğu için Andrea'ya teşekkürler.
Protokoller: STOMP, MQTT, AMQP ve HTTP/2
En çok çalışma STOMP tarafında yapıldı. Nazik bir Disconnect artık aracı bunu bir alındı bildirimiyle onaylayana kadar bekliyor, böylece kapanırken hiçbir şey kaybolmuyor. İletiler, gövdeyi okumak için content-length kullanılarak, aracının gönderdiği şekliyle tam olarak teslim ediliyor, dolayısıyla satır sonları ve ikili sıfırlar içerebiliyor. Bir WebSocket iletisine birkaç tane paketlenmiş çerçevelerin hepsi işleniyor, iki iletiye bölünmüş bir çerçeve yeniden birleştiriliyor, ve ikili çerçeveler artık yok sayılmıyor. ACK ve NACK, anlaşılan sürümün gerektirdiği başlıkları gönderiyor, ve kalp atışları yalnızca sunucu bağlantıyı onayladıktan sonra başlıyor.
oSTOMP.DisconnectTimeout := 10000; // ms to wait for the receipt, 0 = return at once
oSTOMP.ACKEx(vMessageId, vSubscriptionId);
ShowMessage('STOMP ' + oSTOMP.NegotiatedVersion);
MQTT artık aracıların reddettiği paketleri oluşturmuyor, yani kullanıcı adı olup parolası olmayan bir CONNECT ya da daha büyük bir özellik bloğu taşıyan bir MQTT 5 paketi, ve MQTT 5 istemcisi bir paketin sonunu aşarak okumayı bıraktı: kesilmiş bir paket, eskiden bellekte ardından ne geliyorsa onu özellik değerleri olarak uygulamaya veriyordu. Artık aracının söylediğine uyuyor, CONNACK içinde dönen Keep Alive değerinden yalnızca bir Topic Alias ile gelen bir iletiye kadar. QoS 2 yayımlama yolu doğru takip onayını gönderiyor, aracının reddettiği bir iletiyi sonsuza kadar yeniden denemek yerine atıyor, ve makul bir zamanlamayla yeniden deniyor.
AMQP 1.0 istemcisi artık kötü niyetli bir aracıya karşı korunuyor: küçük parçalar hâlinde gelen çerçeveler, geçersiz bir başlık boyutu, aşırı derin iç içe geçmiş iletiler, çok büyük miktarda belleğe açılmak üzere hazırlanmış küçük bir ileti. AMQP 0.9.1 ve 1.0 için varsayılan en büyük çerçeve boyutu, pratikte sınırsız yerine 1 MB oldu. HTTP/2 başlık sıkıştırması, özel olarak hazırlanmış başlıklara karşı korunuyor, bağlantı hiç açılmamış bir akış için gelen bir DATA çerçevesini, bir PRIORITY çerçevesi selini, akış numarası yeniden kullanımını ve boş devam çerçevesi sellerini reddediyor, ve sunucu satır sonu ya da null içeren başlık adlarını ve değerlerini reddediyor, ki bu istek kaçakçılığını önlüyor. Sıfırlanan akışlardan kaynaklanan bellek büyümesi ve yaklaşık 100 istekten sonra ortaya çıkan "CONCURRENT STREAM limit has been exceeded" hatasının ikisi de düzeltildi.
MCP sunucusu
Araçlar artık girdileri için eksiksiz bir JSON Schema sunabiliyor, öğeleriyle birlikte diziler, sabit listeleri, tamsayı ve null olabilen türler, iç içe nesneler ve additionalProperties bildirebiliyor, ki bazı MCP istemcileri bunu gerektirir ve aksi hâlde reddederdi. Sunucu ayrıca 2025-11-25 protokolünün üstverisini de sunuyor: readOnlyHint ek açıklaması ve ek açıklama başlığı, araç simgeleri, sunucu başlığı, web sitesi ve simgeleri, ve tools/list görev desteği bildirimi.
Zaten bir tane çalıştırıyorsanız iki düzeltme önemli. Sunucu, bir istemcinin GET ile açtığı olay akışına kendi iç bağlantı kimliğini bir ileti olarak yazıyordu, VS Code GitHub Copilot gibi istemciler bunu "Failed to parse message" olarak bildiriyordu. Ayrıca kaynak denetimi yalnızca istek, tarayıcıların hiç göndermediği bir başlık taşıdığında çalışıyordu, dolayısıyla engellemesi gereken durum için hiç çalışmıyordu: kullanıcının ziyaret ettiği bir web sayfası, kendi makinesindeki bir MCP sunucusuna erişebilir, araçlarını listeleyebilir, çalıştırabilir ve sonuçları okuyabilirdi. Kaynak artık her istekte denetleniyor, tarayıcının ön denetimi de dâhil.
MCPServer.MCPOptions.HTTPStreamable.AllowedOrigins.Add('https://*.example.com');
Kripto borsaları
Bunun büyük bölümünü iki müşteri bildirimi tetikledi. Bir HTTP hata durumuyla başarısız olan bir istek artık sunucunun yanıtladığı başlıkları bildiriyor, böylece bir 429 üzerindeki Retry-After ya da borsaların döndürdüğü hız sınırı sayaçları nihayet okunabiliyor. Hazır API istemcileri EsgcHTTPAPIProtocolException fırlatır, ki bu daha önce fırlatılan istisnadan türer, dolayısıyla mevcut işleyicileriniz çalışmaya devam eder.
try
vResponse := oBinance.GetAggregateTrades('BTCUSDT');
except
on E: EsgcHTTPAPIProtocolException do
begin
if E.ErrorCode = 429 then
Sleep(E.RetryAfterMs);
vWeight := E.GetHeader('X-MBX-USED-WEIGHT-1M');
// E.ResponseHeaders holds the complete list
end;
end;
Her borsa istemcisi, yeniden bağlandıktan sonra tüm abonelik listesini tek bir patlamada, birkaç milisaniyelik bir bağlantı üzerinden yeniden gönderiyordu, dolayısıyla saniyedeki ileti sayısını sınırlayan bir borsa bağlantıyı hemen kapatıyor ve döngü tekrarlanıyordu. Yeniden gönderim artık hızı ayarlanarak yapılıyor, ve Binance üzerinde birleştirilmiş çerçeveler olarak gönderiliyor. Ayrıca gönderdiğiniz iletiler için yeni bir istemci tarafı kısıtlayıcı da var.
oBinance.Throttle.Enabled := True;
oBinance.Throttle.MaxMessages := 4; // per window
oBinance.Throttle.IntervalMs := 1000;
// paced reconnect replay is on by default:
// oBinance.Throttle.PaceResubscribe := False; restores the old burst
// subscribe a whole watchlist with ONE frame
oBinance.SubscribeStreams(['btcusdt@trade', 'ethusdt@trade', 'bnbusdt@trade']);
Binance, Spot kullanıcı veri akışının üzerine kurulduğu listenKey uç noktalarını kullanımdan kaldırdı, dolayısıyla hesap, emir ve bakiye güncellemeleri artık Binance WebSocket API üzerinden geliyor, bileşenin kendiliğinden açtığı ve bir yeniden bağlanmadan sonra yenilediği ikinci bir bağlantı üzerinden. Olaylar aynı biçimde geliyor, yani işleyicileriniz çalışmaya devam ediyor, ancak yeni abonelik imzalı: artık Binance.ApiKey ile birlikte Binance.ApiSecret de ayarlanmalı. Binance.us ve Futures hâlâ bir listenKey kullanıyor. USD-M Futures piyasa verileri artık iki adresten sunuluyor, yeni Binance.FuturesStreamEndpoint özelliğiyle seçiliyor (varsayılan olarak bfsePublic, toplu işlemler, işaret fiyatı, kline ve tasfiye akışları için bfseMarket).
Ayrıca düzeltildi: OKX fiyatları ve boyutları gönderilmeden önce beş ondalığa yuvarlanıyordu, dolayısıyla daha ince adımlı bir enstrümandaki bir emir istediğiniz emir olmuyordu, ve 0,00001 altındaki bir değer sıfır olarak gönderiliyordu. OKX ve KuCoin keepalive işlemleri artık bir WebSocket ping yerine her borsanın gerektirdiği metin ping'ini gönderiyor, ve geri pong gelmediğinde yeniden bağlanıyor. Daha fazlası: Binance Hız Sınırları: Toplu Gönderim, Hız Ayarı ve Okunabilir 429'lar.
zlib 1.3.1 ve bir malzeme listesi
Birlikte gelen zlib 1.2.12 sürümünden 1.3.1 sürümüne taşındı, ki bu CVE-2022-37434 açığını, inflate içindeki bir yığın taşma okumasını giderir. Bağlanan nesneler Delphi 7'den Delphi 13'e kadar, 32 ve 64 bit olarak yeniden derlendi ve her derleyicide doğrulandı. Yan bir düzeltme: zlib nesneleri Delphi 10 Seattle 64 bit üzerinde hiç bağlanmıyordu, bu sürüm 32 bit nesneleri seçiyor ve derlenemiyordu.
Her kurulum artık ayrıca sbom.cdx.json dosyasını da kuruyor, kütüphanenin üzerine kurulduğu bileşenleri sürümleri ve lisanslarıyla listeleyen bir CycloneDX yazılım malzeme listesi. Enterprise ve All-Access, özelleştirilmiş Indy ile onun zlib sürümlerini belirtir, Core, Standard ve Professional ise Indy'nin Delphi ya da C++ Builder ile birlikte gelen sürüm olduğunu kaydeder. Kurulum derleme zamanında sürüm başına üretilir, dolayısıyla her zaman kurduğunuzla eşleşir. Daha fazlası: sgcWebSockets ve sgcOpenAPI'de zlib 1.3.1 ve sgcWebSockets artık kendi SBOM dosyasını kuruyor.
Güvenlik düzeltmeleri
TLS'in ötesinde, bu sürüm bir dizi açığı kapatıyor. Listeyi okuyun, ve bu bileşenlerden biri uygulamanızdaysa, yükseltin.
- OAuth2 sunucusu. Yetkilendirme kodu, istek hangi adresi belirtiyorsa oraya gönderiliyordu, çünkü yönlendirme adresi kayıtlı olanla hiç karşılaştırılmıyordu, dolayısıyla özel olarak hazırlanmış bir bağlantı bir kullanıcının kodunu başkasının sitesine teslim edebilirdi. Artık tam olarak eşleşmesi gerekiyor. Oturum açma sayfası ayrıca uygulama adını ve istenen kapsamları göstermeden önce temizliyor.
- WebAuthn sunucusu. FIDO üstveri dosyası denetlenmeden güveniliyordu, ve kök sertifika ayarlanmadığında denetim tümüyle atlanıyordu, dolayısıyla sahte bir dosya sunucunun sahte bir kimlik doğrulayıcıyı kabul etmesini sağlayabilirdi. Kayıt sırasında incelenen sertifika uzantısı çözücüsü de hiçbir şey denetlemiyordu, dolayısıyla kesilmiş ya da derinlemesine iç içe geçmiş bir uzantı, sunucunun ilgisiz belleği okumasına yol açabilirdi.
- Files protokolü. Gelen dosya adı neredeyse geldiği gibi kullanılıyordu, dolayısıyla bir eş
../../../filegibi bir ad gönderip diskte herhangi bir yeri okuyabilir, yazabilir ya da silebilirdi. Silme tarafında hiçbir koruma yoktu. - WinHTTP istemcisi. Artık varsayılan olarak sunucu sertifikasını doğruluyor. Daha önce bilinmeyen bir otoriteyi, yanlış bir makine adını ve süresi dolmuş bir tarihi yok sayıyordu, dolayısıyla bir
wssbağlantısı fark edilmeden araya girilerek dinlenebilirdi. - WebSocket protokolü. Açılış el sıkışması standardın gerektirdiği biçimde doğrulanıyor, geçersiz çerçeveler kabul edilmek yerine reddediliyor, el sıkışma anahtarı güvenli bir rastgele üreteç kullanıyor, ve kullanıcı adı ile parola denetimi, parola doğruya yakın olsa da olmasa da aynı süreyi alıyor.
- HTTP istemcisi. Yanıt başlıklarına konan sınır hiç uygulanmıyordu, dolayısıyla bir sunucu, istemcinin belleği tükenene kadar bitmeyen bir başlık akışı gönderebilirdi.
MaxHeaderLinesdeğerini 0 yapmak, yani sınırsız anlamına gelmesi gerekirken, ters etki yapıyor veContent-LengthileLocationdâhil her yanıt başlığını atıyordu. - OpenAPI sunucusu.
EnforceSecurityetkinken ancak doğrulama olayı atanmamışken, yalnızca bir api anahtarı ya da birAuthorizationbaşlığı taşıyan herhangi bir istek işleme ulaşıyordu. Bu istekler artık 401 yanıtı alıyor. - Ayrıştırıcılar. Yedi STUN özniteliği ve birkaç SOCKS5 yanıtı paketin sonu aşılarak okunuyordu, ve DTLS bağlantısı, bir eş tek bir datagram içinde birden çok kayıt gönderdiğinde okuma tamponunun sonunu aşarak yazıyordu.
Gözden kaçması kolay bir tane daha: TLS seçeneklerinin çoğu, bir bileşenden diğerine kopyalanırken kayboluyordu. Yalnızca IO işleyicisi, ALPN protokolleri ve OpenSSL seçenekleri kopyalanıyordu, dolayısıyla sertifika dosyaları, parola, kök sertifika, TLS sürümü ve VerifyCertificate boş kalıyordu, ve bu şekilde kurulan bir bileşen hiçbir şeyi doğrulamıyor durumda kalıyordu.
Küçük eklemeler
- WebTransport. Bir oturum üzerinde, datagramların gerçekten gönderilip gönderilemeyeceğini söyleyen yeni
DatagramsSupportedözelliği. - Soketler. Bir bağlantının soket bağlaması üzerinde yeni
SetReceiveTimeoutyöntemi,SetSendTimeoutyönteminin karşılığı, böylece sessizleşen bir bağlantı, okuma yapan iş parçacığını dondurmak yerine temiz biçimde başarısız oluyor. - Köprü sunucuları. Köprü üzerinde barındırılan bir DataSnap ya da WebBroker uygulamasının belirlediği çerezler 1899 yılına ait bir tarih olarak serileştiriliyordu, dolayısıyla tarayıcılar bunları çoktan süresi dolmuş kabul edip atıyordu, ve HTTP.sys köprüsü birkaç çerezi tek bir çereze indiriyordu. Artık tüm öznitelikleriyle birlikte oturum çerezi olarak gönderiliyorlar.
- Hatalar. Başarısız bir TLS bağlantısı eskiden "error:00000006:lib(0):func(0):EVP lib" gibi bir şey bildiriyordu, çünkü OpenSSL'den gelen gerçek neden atılıyordu. ML-KEM-768 artık OpenSSL 3.5 ya da sonrasına ihtiyaç duyduğunu açıklıyor ve bulunan sürümü gösteriyor, ve RC2 40-bit gibi eski bir algoritma kullanan bir PKCS#12 dosyası eski sağlayıcının nasıl etkinleştirileceğini açıklıyor.
- İstisnalar. TCP ve HTTP/2 bileşenlerinin
OnExceptionolayındaki rastgele çökmeler düzeltildi. İstisna, olay çalışmadan önce onu fırlatan iş parçacığı tarafından yok ediliyordu, dolayısıyla işleyici serbest bırakılmış belleği okuyor ve yanlış bir sınıf adı bildiriyordu.
Bu sürümün çevresinde yeni olanlar
Kütüphaneyle birlikte gelen iki parça bu ay kendi makalelerini aldı: REST sunucu bileşenleri, yani CORS, metrikler, sağlık uç noktaları, çok kiracılılık ve tek bir belirtim dosyasını yönlendirmeye, doğrulamaya, güvenliğe ve Swagger UI'a dönüştüren bir OpenAPI eklentisiyle REST API'ler için yapılmış bir HTTP sunucusu, ve .proto dosyalarını Delphi birimlerine dönüştüren kod üreteci sgcProtoBuf. Daha fazlası: TsgcHTTPRESTServer: Yeni REST Sunucu Bileşeni, REST Sunucusu + OpenAPI, Kullanıcılar, Çok Kiracılılık ve Metrikler ve sgcProtoBuf: .proto Dosyalarından Delphi Birimlerine.
.NET sürümü
sgcWebSockets .NET 2026.8, bu sürümün ortak yarısını taşıyor. SChannel çalışmasının tamamı orada, yani yok sayılan sürüm, klonlanan bağlantılarda kaybolan ayarlar, denetlenmeyen yeniden anlaşma, hiç tamamlanmayan TLS 1.3 bağlantısı, fark edilmeden düşen bağlantı, sınırsız el sıkışma ve başlangıç yarışı, ayrıca kapatmadan önceki kapatma bildirimi ve sunucuda istemci sertifikası doğrulaması. IOCP ve EPOLL düzeltmeleri, WebSocket el sıkışması ve çerçeve doğrulaması, MQTT, STOMP, AMQP ve HTTP/2 sağlamlaştırmaları, OAuth2, WebAuthn, MCP ve Files protokolü güvenlik düzeltmeleri, ve borsa değişiklikleri (Binance Spot kullanıcı veri akışı, hızı ayarlanmış yeniden bağlanma gönderimi, OKX ve KuCoin keepalive işlemleri) de dâhil. Alındı bildirimiyle birlikte gelen nazik STOMP Disconnect işlemi ve WebSocket sunucusundaki denetim çerçevesi sınırı da orada yeni.
Yükseltme
2026.8, mevcut 2026.x projeleri için doğrudan yerine geçen bir yükseltme, ancak derlemeden önce bilinmesi gereken iki şey var. Binance Spot kullanıcı veri akışı artık aboneliğini imzalıyor, dolayısıyla Binance.ApiKey yanında Binance.ApiSecret de ayarlanmalı. Ayrıca WebSocket sunucusu artık sınırsız sayı yerine varsayılan olarak 10.000 eşzamanlı bağlantı kabul ediyor, dolayısıyla bunun üzerinde çalışıyorsanız MaxConnections değerini yükseltin ya da 0 yapın.
Geri kalan her şey siz isteyene kadar kapalı: iptal denetimi, sürüm alt sınırı, güçlü kriptografi, istemci sertifikası doğrulaması, IOCP ve EPOLL motorlarında keep-alive, ileti kısıtlayıcı ve MCP izin verilen kaynaklar listesi, hepsi önceki davranışa göre varsayılıyor.
Etkin aboneliği olan müşteriler yeni yapıyı müşteri alanından ya da esegece.com/products/websockets/download adresinden indirebilir.
Sorularınız, geri bildiriminiz ya da geçiş yardımı mı gerekiyor? Bize ulaşın. Yanıtı, kodu yazan kişilerden alacaksınız.
