sgcWebSockets 2026.6 to jedno z największych wydań w historii biblioteki. Przynosi trzy zupełnie nowe klienty (natywny klient gRPC, klient Apache Kafka oraz samodzielny serwer OpenAPI 3), dwa natywne dla systemu operacyjnego backendy TLS, które pozwalają wdrażać aplikacje mobilne i desktopowe bez OpenSSL, silnik wykrywania botów w zaporze działający wyłącznie w trybie klasyfikacji, transport stdio dla MCP dla agentów AI, zestaw postkwantowych prymitywów kryptograficznych oraz szeroką falę wzmocnień bezpieczeństwa obejmującą serwery WebSocket i HTTP.
Ten wpis to przewodnik po najważniejszych nowościach, z krótkim fragmentem kodu w Delphi dla każdej z nich oraz odnośnikiem do dedykowanego artykułu, w którym każda funkcja została opisana szczegółowo.
Klient gRPC działający na HTTP/2
Nowy TsgcGRPCClient to natywny klient gRPC zbudowany na istniejącym TsgcHTTP2Client, który nie wymaga wdrażania żadnego zewnętrznego środowiska uruchomieniowego gRPC. Obsługuje cztery wzorce RPC (unarny, strumieniowanie po stronie serwera, strumieniowanie po stronie klienta oraz strumieniowanie dwukierunkowe), opcje kanału dla kompresji i typu zawartości, domyślne metadane i metadane na poziomie wywołania, terminy wykonania, automatyczne ponawianie z wykładniczym wycofywaniem, równoważenie obciążenia po stronie klienta (Pick First i Round Robin), gRPC Health Checking, Server Reflection, interceptory oraz metryki OpenTelemetry.
uses
sgcHTTP2, sgcGRPC_Client, sgcGRPC_Classes, sgcGRPC_Types;
var
HTTP2: TsgcHTTP2Client;
GRPC: TsgcGRPCClient;
oResponse: TsgcGRPCResponse;
begin
HTTP2 := TsgcHTTP2Client.Create(nil);
HTTP2.Host := 'grpc.example.com';
HTTP2.Port := 443;
HTTP2.TLS := True;
GRPC := TsgcGRPCClient.Create(nil);
GRPC.Client := HTTP2;
// metadata is sent on every call (auth, tracing...)
GRPC.DefaultMetadata.Add('authorization', 'Bearer eyJ...');
// unary call: the request is your serialized protobuf message as TBytes
oResponse := GRPC.Call('helloworld.Greeter', 'SayHello', RequestBytes);
if oResponse.StatusCode = grpcOK then
Memo1.Text := oResponse.DataString
else
ShowMessage('gRPC error: ' + oResponse.StatusMessage);
end;
Oprócz generycznego klienta, 2026.6 dostarcza typowane interfejsy gRPC dla ośmiu usług Google Cloud, z których każda zawiera klasy żądań i odpowiedzi protobuf oraz uwierzytelnianie JWT za pomocą konta usługi: Pub/Sub, Speech-to-Text, Translation, Vision, Natural Language, Cloud Storage, BigQuery Storage i Vertex AI. Pełny przewodnik: Klient gRPC dla Delphi.
Samodzielny serwer OpenAPI 3
TsgcWSAPIServer_OpenAPI zamienia specyfikację OpenAPI 3 w działający serwer REST. Wczytaj specyfikację (lub wygeneruj ją z klasy Delphi za pomocą atrybutów RTTI), podłącz ją do TsgcWebSocketHTTPServer, a otrzymasz routing, walidację żądań, Swagger UI i CORS od ręki. Błędy walidacji automatycznie zwracają problem+json zgodny z RFC 7807.
uses
sgcWebSocket, sgcWebSocket_Classes,
sgcWebSocket_Server_API_OpenAPI,
sgcHTTP_OpenAPI_Server;
var
WSServer: TsgcWebSocketHTTPServer;
FOpenAPI: TsgcWSAPIServer_OpenAPI;
begin
WSServer := TsgcWebSocketHTTPServer.Create(nil);
WSServer.Port := 8080;
FOpenAPI := TsgcWSAPIServer_OpenAPI.Create(nil);
FOpenAPI.OnRequest := OnOpenAPIRequest;
FOpenAPI.OnValidationError := OnOpenAPIValidationError;
FOpenAPI.OpenAPIOptions.Endpoint.ServeSpec := True;
FOpenAPI.OpenAPIOptions.Endpoint.ServeSwaggerUI := True;
FOpenAPI.OpenAPIOptions.CORS.Enabled := True;
FOpenAPI.OpenAPIOptions.Validation.ValidateRequest := True;
FOpenAPI.LoadFromFile('petstore.json');
FOpenAPI.Server := WSServer;
WSServer.Active := True;
// Swagger UI: http://localhost:8080/docs
// Raw spec: http://localhost:8080/openapi.json
end;
Czytaj więcej: Serwer OpenAPI dla Delphi.
Klient Apache Kafka
TsgcWSPClient_Kafka to natywny klient Apache Kafka, który posługuje się binarnym protokołem sieciowym Kafka po surowym TCP, bez zależności od Javy lub librdkafka. Produkuj i konsumuj komunikaty, subskrybuj i odpytuj oraz zarządzaj grupami konsumentów, tematami i offsetami.
uses
sgcWebSocket, sgcWebSocket_Protocols, sgcKafka_Classes;
var
oClient: TsgcWebSocketClient;
oKafka: TsgcWSPClient_Kafka;
begin
oClient := TsgcWebSocketClient.Create(nil);
oClient.Specifications.RFC6455 := False; // raw TCP, native Kafka protocol
oClient.Host := '127.0.0.1';
oClient.Port := 9092;
oKafka := TsgcWSPClient_Kafka.Create(nil);
oKafka.Client := oClient;
oKafka.KafkaOptions.ClientId := 'my-delphi-app';
oKafka.OnKafkaConnect := OnKafkaConnect;
oKafka.OnKafkaMessage := OnKafkaMessage;
oKafka.OnKafkaProduce := OnKafkaProduce;
oClient.Active := True; // connect to the broker
end;
Czytaj więcej: Klient Apache Kafka dla Delphi.
Natywny TLS na Android i Apple, bez wdrażania OpenSSL
Dwa nowe backendy TLS wykonują handshake przez system operacyjny zamiast OpenSSL, dzięki czemu Twoja aplikacja nie dostarcza żadnego libssl.so / libcrypto.so na Androidzie ani żadnego .dylib na iOS i macOS. Oba są wybierane dla danej platformy poprzez TLSOptions.IOHandler i wykorzystują to samo API TLSOptions, którego już używasz (własny CA, certyfikat klienta, ALPN).
Android (iohAndroidTLS) wykonuje TLS poprzez platformowy javax.net.ssl.SSLEngine za pomocą JNI, weryfikuje względem systemowego magazynu zaufania Androida wraz z weryfikacją nazwy hosta, negocjuje TLS 1.3 i obsługuje ALPN na Androidzie 10 i nowszych. Wymaga RAD Studio XE8+.
uses
sgcWebSocket, sgcWebSocket_Types;
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAndroidTLS;
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;
Apple (iohAppleTLS) automatycznie wybiera Network.framework dla TLS 1.3 na macOS 10.14+ oraz iOS 12+, a na starszych systemach przechodzi na Secure Transport (TLS 1.2). Korzysta z systemowego magazynu zaufania z SNI i weryfikacją nazwy hosta oraz udostępnia zdarzenie OnAppleTLSVerifyPeer do własnej walidacji. Wymaga RAD Studio XE6+.
uses
sgcWebSocket, sgcWebSocket_Types;
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAppleTLS;
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;
Czytaj więcej: Natywny TLS dla Androida oraz Natywny TLS dla Apple.
Wykrywanie botów w zaporze
TsgcWebSocketFirewall zyskuje moduł wykrywania botów oparty na adresach IP, który klasyfikuje klienta jako zweryfikowanego robota wyszukiwarki, zakres centrum danych lub adres z listy blokowanych, wykorzystując listy CIDR znanych botów, zakresy ASN centrów danych, potwierdzony do przodu odwrotny DNS (FCrDNS) oraz zapytania DNSBL. Działa wyłącznie w trybie klasyfikacji: wynik jest udostępniany przez nowe zdarzenie OnBotDetected oraz metodę GetBotClassification, więc to Ty decydujesz, co z nim zrobić, zamiast pozwalać zaporze blokować połączenia za Ciebie.
TsgcBotClassification = (bcUnknown, bcVerifiedCrawler, bcDatacenter,
bcSuspectedBot, bcBlocklisted, bcHuman);
To wydanie przynosi również pełną obsługę IPv6 w zaporze: dopasowywanie CIDR czarnej i białej listy aż do /128, blokady krajów IPv6 z GeoLite2, zakresy botów IPv6 oraz odwrotny DNS / DNSBL w ip6.arpa. Naprawiono długotrwały błąd, w którym CIDR IPv6 był obliczany przy użyciu arytmetyki 32-bitowej (i przez to dopasowywał każdego klienta IPv6). Czytaj więcej: Wykrywanie botów w zaporze.
Transport stdio dla MCP
Serwer i klient Model Context Protocol mogą teraz działać przez standardowe wejście/wyjście dzięki nowemu hostowi TsgcAI_MCP_Server_Stdio, więc Twój serwer MCP w Delphi może być uruchamiany jako lokalny podproces przez agentów AI, takich jak Claude Code. Narzędzia są rejestrowane dokładnie tak samo jak na serwerze HTTP.
uses
SysUtils, sgcAI_MCP_Server, sgcAI_MCP_Classes, sgcAI_MCP_Types;
var
oServer: TsgcAI_MCP_Server_Stdio;
oTool: TsgcAI_MCP_Tool;
begin
oServer := TsgcAI_MCP_Server_Stdio.Create(nil);
try
oServer.ServerInfo.Name := 'MyDelphiServer';
oServer.ServerInfo.Version := '1.0';
oTool := oServer.MCPServer.Tools.AddTool('add', 'Adds two numbers');
oTool.InputSchema.Properties.AddProperty('a', True, aimcpjtNumber);
oTool.InputSchema.Properties.AddProperty('b', True, aimcpjtNumber);
oServer.MCPServer.OnMCPRequestTool := OnRequestTool;
// read JSON-RPC from stdin, write responses to stdout, blocks until EOF
oServer.Run;
finally
oServer.Free;
end;
end.
Czytaj więcej: Transport stdio dla MCP po stronie serwera i klienta.
Wzmocniony domyślnie
2026.6 zamyka partię problemów związanych z odmową usługi oraz zgodnością protokołów w serwerach i udostępnia nowe limity jako właściwości z bezpiecznymi wartościami domyślnymi.
Serwery WebSocket ograniczają teraz pamięć komunikatów za pomocą MaxMessageSize (domyślnie 64 MB, 0 = bez ograniczeń), odrzucając zbyt duże komunikaty, niekończącą się fragmentację oraz "bomby zip" permessage-deflate kodem zamknięcia 1009. Nowe SecurityOptions.EnforceWebSocketVersion oraz SecurityOptions.ValidateWebSocketKey weryfikują handshake RFC 6455, oba włączone domyślnie.
oServer := TsgcWebSocketServer.Create(nil);
oServer.Port := 80;
// accept messages up to 16 MB, reject anything larger with close 1009
oServer.MaxMessageSize := 16 * 1024 * 1024;
oServer.Active := True;
Serwer HTTP dodaje MaxRequestBodySize (domyślnie 64 MB) oraz StrictRequestParsing (domyślnie True, odrzucające żądanie, które niesie jednocześnie Content-Length i Transfer-Encoding). Naprawiono path traversal przy serwowaniu plików statycznych, złagodzono HTTP/2 Rapid Reset (CVE-2023-44487) za pomocą limitów RST_STREAM na połączenie oraz limitów ramek kontrolnych, a pliki DocumentRoot są teraz strumieniowane z dysku za pomocą współdzielonego TFileStream zamiast wczytywania ich w całości do pamięci, dzięki czemu zużycie RAM serwera pozostaje płaskie niezależnie od rozmiaru pliku czy liczby połączeń.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.Port := 80;
oServer.MaxRequestBodySize := 16 * 1024 * 1024; // 16 MB, reject larger with 413
oServer.Active := True;
Czytaj więcej: Wzmacnianie serwera WebSocket oraz Wzmacnianie serwera HTTP.
Kryptografia postkwantowa i AEAD
Dla aplikacji budujących hybrydowe handshake'i postkwantowe, 2026.6 dodaje enkapsulację i dekapsulację ML-KEM-768 (sgcKEM_MLKEM768_Encapsulate / Decapsulate, OpenSSL 3.5+) obok klasycznego ECDH-jako-KEM nad P-256 (sgcKEM_ECDH_P256_Encapsulate / Decapsulate), który ma ten sam kształt API TBytes, więc możesz przełączać się między klasycznymi a postkwantowymi KEM-ami bez zmiany kodu.
Nowa jednostka sgcSSL_AEAD dostarcza generyczne prymitywy AEAD (sgcAEAD_Encrypt / sgcAEAD_Decrypt) dla AES-128-GCM, AES-256-GCM oraz ChaCha20-Poly1305, z 12-bajtowym nonce dostarczanym przez wywołującego oraz dowolnym AAD. Opakowania sgcAEAD_EncryptPrefixed / sgcAEAD_DecryptPrefixed tworzą i konsumują samowystarczalny blob "nonce(12) || ciphertext || tag(16)" używany przez Bouncy Castle GCM, JOSE A256GCM, libsodium oraz większość protokołów w stylu HPKE.
uses
sgcSSL_AEAD;
var
vKey, vPlain, vBlob, vOut: TBytes;
begin
// vKey: 32 bytes from KEM Decapsulate + HKDF
vBlob := sgcAEAD_EncryptPrefixed(aeadAES256GCM, vKey, vPlain, nil);
vOut := sgcAEAD_DecryptPrefixed(aeadAES256GCM, vKey, vBlob, nil);
end;
API pobierania dla konta
Nowe API REST w Twoim koncie eSeGeCe pozwala zalogować się, wylistować i pobrać pliki, do których uprawnia Cię subskrypcja, bezpośrednio ze skryptów lub CI. Jest opisane w OpenAPI 3.0 i dostarczane z gotowym do użycia klientem Delphi zbudowanym na sgcOpenAPI.
curl -X POST https://www.esegece.com/api/v1/login \
-H "Content-Type: application/json" \
-d '{"username":"YOUR_USERNAME","password":"YOUR_PASSWORD"}'
Czytaj więcej: Zautomatyzuj swoje pobierania dzięki API konta.
Również w tym wydaniu
- Instalator zyskuje opcję Include Resources: odznacz ją, aby przed kompilacją cofnąć definicję
SGC_RESOURCESi usunąć osadzony zasób JS, zmniejszając rozmiar aplikacji. - MQTT 5.0: poprawiono identyfikatory właściwości Subscription Identifier oraz Server Reference, które rygorystyczne węzły 5.0 mogły odrzucać.
- AMQP 1.0: duże komunikaty są teraz dzielone na wiele ramek, gdy przekraczają wynegocjowany max-frame-size.
- STOMP: naprawiono zalew heart-beatów, gdy domyślne ustawienia pozostawiały interwał wychodzący na 0.
- Server-Sent Events: zapasowa wartość retry jest teraz wysyłana w milisekundach, a nie mnożona przez 1000.
- STUN / TURN: pełny 96-bitowy kryptograficznie losowy identyfikator transakcji oraz długość ChannelData wyklucza teraz wypełnienie zgodnie z RFC 5766.
- API giełd: poprawki dla subskrypcji strumieni Bybit, Kraken i MEXC. Wycofany klient FXCM został usunięty.
Options.WriteTimeOutdziała teraz na Linuksie i innych platformach POSIX (SO_SNDTIMEO jest przekazywane jako timeval), więc wolno czytający klient nie blokuje już wątku serwera w nieskończoność.
Aktualizacja
2026.6 to aktualizacja typu drop-in dla istniejących projektów 2026.x. Wzmocnienia serwera są dostarczane z bezpiecznymi wartościami domyślnymi, więc jedyną rzeczą, na którą trzeba zwrócić uwagę, jest domyślne 64 MB dla MaxMessageSize / MaxRequestBodySize: jeśli Twoja aplikacja zgodnie z założeniami wymienia większe ładunki, podnieś limit (lub ustaw go na 0 dla braku ograniczeń), aby dopasować się do poprzedniego zachowania.
Klienci z aktywną subskrypcją mogą pobrać nową kompilację z obszaru klienta lub z esegece.com/products/websockets/download.
Pytania, opinie lub pomoc w migracji? Skontaktuj się z nami. Otrzymasz odpowiedź od ludzi, którzy napisali ten kod.
