O sgcWebSockets 2026.6 é um dos maiores lançamentos da história da biblioteca. Ele traz três clientes totalmente novos (um cliente gRPC nativo, um cliente Apache Kafka e um servidor OpenAPI 3 autônomo), dois backends TLS nativos do sistema operacional que permitem que seus aplicativos móveis e desktop sejam distribuídos sem OpenSSL, um mecanismo de detecção de bots apenas para classificação no firewall, um transporte MCP stdio para agentes de IA, um conjunto de primitivas de criptografia pós-quântica e uma ampla etapa de reforço de segurança nos servidores WebSocket e HTTP.
Esta publicação é um tour guiado pelos destaques, com um pequeno trecho em Delphi para cada um e um link para o artigo dedicado em que cada recurso é abordado em profundidade.
Cliente gRPC sobre HTTP/2
O novo TsgcGRPCClient é um cliente gRPC nativo construído sobre o já existente TsgcHTTP2Client, sem nenhum runtime gRPC externo para implantar. Ele oferece suporte aos quatro padrões de RPC (unário, streaming de servidor, streaming de cliente e streaming bidirecional), opções de canal para compressão e content-type, metadados padrão e por chamada, deadlines, novas tentativas automáticas com backoff exponencial, balanceamento de carga no lado do cliente (Pick First e Round Robin), gRPC Health Checking, Server Reflection, interceptadores e métricas 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;
Além do cliente genérico, o 2026.6 disponibiliza interfaces gRPC tipadas para oito serviços do Google Cloud, cada uma com classes de requisição e resposta protobuf e autenticação JWT por conta de serviço: Pub/Sub, Speech-to-Text, Translation, Vision, Natural Language, Cloud Storage, BigQuery Storage e Vertex AI. Tutorial completo: Cliente gRPC para Delphi.
Servidor OpenAPI 3 autônomo
O TsgcWSAPIServer_OpenAPI transforma uma especificação OpenAPI 3 em um servidor REST em execução. Carregue uma especificação (ou gere uma a partir de uma classe Delphi por meio de atributos RTTI), associe-a a um TsgcWebSocketHTTPServer e você terá roteamento, validação de requisições, Swagger UI e CORS prontos para uso. Falhas de validação retornam automaticamente problem+json conforme a 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;
Leia mais: Servidor OpenAPI para Delphi.
Cliente Apache Kafka
O TsgcWSPClient_Kafka é um cliente Apache Kafka nativo que fala o protocolo binário de fio do Kafka sobre TCP bruto, sem dependência de Java ou librdkafka. Produza e consuma mensagens, assine e faça polling, e gerencie grupos de consumidores, tópicos e offsets.
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;
Leia mais: Cliente Apache Kafka para Delphi.
TLS nativo no Android e na Apple, sem OpenSSL para implantar
Dois novos backends TLS executam o handshake por meio do sistema operacional em vez do OpenSSL, de modo que seu aplicativo não distribui nenhum libssl.so / libcrypto.so no Android e nenhum .dylib no iOS e no macOS. Ambos são selecionados por plataforma através de TLSOptions.IOHandler e reutilizam a mesma API TLSOptions que você já utiliza (CA personalizada, certificado de cliente, ALPN).
Android (iohAndroidTLS) executa o TLS por meio do javax.net.ssl.SSLEngine da plataforma via JNI, valida contra o repositório de confiança do sistema Android com verificação de nome de host, negocia TLS 1.3 e oferece suporte a ALPN no Android 10 e versões posteriores. Requer 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) seleciona automaticamente o Network.framework para TLS 1.3 no macOS 10.14+ e no iOS 12+, e recorre ao Secure Transport (TLS 1.2) em sistemas mais antigos. Ele usa o repositório de confiança do sistema com SNI e verificação de nome de host, e expõe o evento OnAppleTLSVerifyPeer para validação personalizada. Requer RAD Studio XE6+.
uses
sgcWebSocket, sgcWebSocket_Types;
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAppleTLS;
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;
Leia mais: TLS nativo no Android e TLS nativo na Apple.
Detecção de bots no firewall
O TsgcWebSocketFirewall ganha um módulo de detecção de bots baseado em IP que classifica um cliente como um rastreador de mecanismo de busca verificado, uma faixa de datacenter ou um endereço na lista de bloqueio, usando listas CIDR de bots conhecidos, faixas ASN de datacenters, DNS reverso confirmado de forma direta (FCrDNS) e consultas DNSBL. É apenas para classificação: o resultado é exposto pelo novo evento OnBotDetected e pelo método GetBotClassification, de modo que você decide o que fazer com ele, em vez de o firewall bloquear as conexões por você.
TsgcBotClassification = (bcUnknown, bcVerifiedCrawler, bcDatacenter,
bcSuspectedBot, bcBlocklisted, bcHuman);
Este lançamento também traz suporte completo a IPv6 no firewall: correspondência CIDR de lista negra e lista branca até /128, bloqueios de país GeoLite2 IPv6, faixas de bots IPv6 e DNS reverso / DNSBL ip6.arpa. Foi corrigido um bug de longa data em que um CIDR IPv6 era avaliado com matemática de 32 bits (e, portanto, correspondia a todos os clientes IPv6). Leia mais: Detecção de bots no firewall.
Transporte MCP stdio
O servidor e o cliente do Model Context Protocol agora podem ser executados por entrada/saída padrão através do novo host TsgcAI_MCP_Server_Stdio, de modo que seu servidor MCP em Delphi pode ser iniciado como um subprocesso local por agentes de IA, como o Claude Code. As ferramentas são registradas exatamente como são no servidor 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.
Leia mais: Transporte MCP stdio para servidor e cliente.
Reforçado por padrão
O 2026.6 corrige um conjunto de problemas de negação de serviço e de conformidade de protocolo nos servidores, e expõe os novos limites como propriedades com valores padrão seguros.
Os servidores WebSocket agora limitam a memória de mensagens com MaxMessageSize (padrão 64 MB, 0 = ilimitado), rejeitando mensagens superdimensionadas, fragmentação infinita e "zip bombs" do permessage-deflate com close 1009. As novas opções SecurityOptions.EnforceWebSocketVersion e SecurityOptions.ValidateWebSocketKey validam o handshake da RFC 6455, ambas habilitadas por padrão.
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;
O servidor HTTP adiciona MaxRequestBodySize (padrão 64 MB) e StrictRequestParsing (padrão True, rejeitando uma requisição que carrega tanto Content-Length quanto Transfer-Encoding). A travessia de caminho no fornecimento de arquivos estáticos foi corrigida, o HTTP/2 Rapid Reset (CVE-2023-44487) é mitigado com limites de RST_STREAM e de frames de controle por conexão, e os arquivos do DocumentRoot agora são transmitidos do disco com um TFileStream compartilhado em vez de serem carregados totalmente na memória, de modo que a RAM do servidor permanece estável independentemente do tamanho do arquivo ou da quantidade de conexões.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.Port := 80;
oServer.MaxRequestBodySize := 16 * 1024 * 1024; // 16 MB, reject larger with 413
oServer.Active := True;
Leia mais: Reforçando o servidor WebSocket e Reforçando o servidor HTTP.
Criptografia pós-quântica e AEAD
Para aplicativos que constroem handshakes híbridos pós-quânticos, o 2026.6 adiciona encapsulamento e desencapsulamento ML-KEM-768 (sgcKEM_MLKEM768_Encapsulate / Decapsulate, OpenSSL 3.5+) ao lado de um ECDH-como-KEM clássico sobre P-256 (sgcKEM_ECDH_P256_Encapsulate / Decapsulate) que compartilha o mesmo formato de API TBytes, de modo que você pode alternar entre KEMs clássicos e pós-quânticos sem alterar seu código.
Uma nova unidade sgcSSL_AEAD fornece primitivas AEAD genéricas (sgcAEAD_Encrypt / sgcAEAD_Decrypt) para AES-128-GCM, AES-256-GCM e ChaCha20-Poly1305, com um nonce de 12 bytes fornecido pelo chamador e AAD arbitrário. Os wrappers sgcAEAD_EncryptPrefixed / sgcAEAD_DecryptPrefixed produzem e consomem o blob autocontido "nonce(12) || ciphertext || tag(16)" usado pelo Bouncy Castle GCM, JOSE A256GCM, libsodium e pela maioria dos protocolos no estilo 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 de download da conta
Uma nova API REST em sua conta eSeGeCe permite que você faça login, liste e baixe os arquivos a que sua assinatura dá direito, diretamente de scripts ou de CI. Ela é descrita com OpenAPI 3.0 e vem com um cliente Delphi pronto para uso construído sobre o sgcOpenAPI.
curl -X POST https://www.esegece.com/api/v1/login \
-H "Content-Type: application/json" \
-d '{"username":"YOUR_USERNAME","password":"YOUR_PASSWORD"}'
Leia mais: Automatize seus downloads com a API da conta.
Também neste lançamento
- O Setup ganha uma opção Include Resources: desmarque-a para indefinir
SGC_RESOURCESantes da compilação e remover o recurso JS incorporado, reduzindo o tamanho do aplicativo. - MQTT 5.0: corrigidos os identificadores das propriedades Subscription Identifier e Server Reference, que peers 5.0 rigorosos poderiam rejeitar.
- AMQP 1.0: mensagens grandes agora são divididas em vários frames quando excedem o max-frame-size negociado.
- STOMP: corrigida uma inundação de heart-beat quando as configurações padrão deixavam o intervalo de saída em 0.
- Server-Sent Events: o valor de retry de fallback agora é enviado em milissegundos, não multiplicado por 1000.
- STUN / TURN: id de transação criptograficamente aleatório completo de 96 bits, e o comprimento do ChannelData agora exclui o padding conforme a RFC 5766.
- APIs de exchange: correções para as assinaturas de stream da Bybit, Kraken e MEXC. O cliente FXCM, descontinuado, foi removido.
Options.WriteTimeOutagora funciona no Linux e em outras plataformas POSIX (SO_SNDTIMEO é passado como um timeval), de modo que um cliente que lê lentamente não bloqueia mais uma thread do servidor indefinidamente.
Atualizando
O 2026.6 é uma atualização imediata para projetos 2026.x existentes. O reforço dos servidores vem com valores padrão seguros, então a única coisa a observar é o padrão de 64 MB de MaxMessageSize / MaxRequestBodySize: se o seu aplicativo legitimamente troca payloads maiores, aumente o limite (ou defina-o como 0 para ilimitado) para corresponder ao seu comportamento anterior.
Clientes com uma assinatura ativa podem baixar a nova build na área do cliente, ou em esegece.com/products/websockets/download.
Dúvidas, comentários ou ajuda com a migração? Entre em contato. Você receberá uma resposta das pessoas que escreveram o código.
