Cliente e Servidor QUIC
TsgcQUICClient e TsgcQUICServer falam QUIC puro: múltiplos streams independentes em uma conexão criptografada, datagramas não confiáveis e migração de conexão quando o endereço IP do cliente muda no meio da sessão.
TCP mais TLS precisa de três viagens de ida e volta antes que o primeiro byte de uma resposta chegue. O QUIC combina o handshake de transporte e o handshake de criptografia em um único envio, e uma conexão retomada pode enviar dados já no primeiro pacote. O sgcQUIC dá ao Delphi, C++ Builder e .NET um transporte QUIC nativo e um cliente e servidor HTTP/3 construídos sobre ele, no mecanismo QUIC do OpenSSL 3.5.
O sgcQUIC não é uma implementação parcial. Transporte, framing, compressão de cabeçalhos e a extensão WebTransport, tudo coberto, sobre o mecanismo QUIC nativo do OpenSSL 3.5.
Um transporte QUIC bruto e um cliente e servidor HTTP/3 para Delphi, C++ Builder e .NET. Um complemento do sgcWebSockets Enterprise, sobre o mesmo mecanismo QUIC nativo do OpenSSL 3.5. Código-fonte completo, implantação sem royalties.
Use TsgcQUICClient e TsgcQUICServer para um transporte puro com o seu próprio framing, ou vá direto para TsgcHTTP3Client e TsgcHTTP3Server quando o formato de wire for HTTP.
TsgcQUICClient e TsgcQUICServer falam QUIC puro: múltiplos streams independentes em uma conexão criptografada, datagramas não confiáveis e migração de conexão quando o endereço IP do cliente muda no meio da sessão.
TsgcHTTP3Client e TsgcHTTP3Server colocam a semântica HTTP por cima: cabeçalhos de requisição e resposta comprimidos com QPACK, descoberta via Alt-Svc, e os mesmos métodos e códigos de status que o seu código HTTP/2 já usa.
Um cliente que já se conectou antes pode enviar sua primeira requisição já no primeiro pacote, antes mesmo de o handshake terminar.
Um connection ID identifica a sessão, não o endereço IP, então um celular que passa do Wi-Fi para os dados móveis mantém seus streams abertos.
Streams bidirecionais e datagramas não confiáveis sobre uma única requisição Extended CONNECT, para clientes de navegador que falam WebTransport.
Guias práticos para os componentes QUIC e HTTP/3:
A mesma forma de qualquer outro cliente HTTP do sgcWebSockets: defina propriedades, trate um evento, chame um método.
uses
sgcHTTP3_Client;
var
vClient: TsgcHTTP3Client;
begin
vClient := TsgcHTTP3Client.Create(nil);
vClient.Host := 'api.example.com';
vClient.Port := 443;
vClient.OnResponse :=
procedure(Sender: TObject; const AStatus: Integer; const ABody: string)
begin
Memo1.Lines.Add(Format('%d: %s', [AStatus, ABody]));
end;
vClient.OnAltSvc :=
procedure(Sender: TObject; const AAltSvc: string)
begin
Memo1.Lines.Add('Alt-Svc: ' + AAltSvc); // h3 advertised over HTTP/2
end;
vClient.Connect;
vClient.Get('/pets/42');
end;
uses
sgcQUIC_Client;
var
vQUIC: TsgcQUICClient;
begin
vQUIC := TsgcQUICClient.Create(nil);
vQUIC.Host := 'quic.example.com';
vQUIC.Port := 4433;
vQUIC.EnableMultiStream := True;
vQUIC.OnQUICConnect :=
procedure(Sender: TObject)
var
vStreamId: Int64;
begin
vStreamId := vQUIC.OpenStream;
vQUIC.WriteData(vStreamId, 'ping');
end;
vQUIC.OnQUICStreamData :=
procedure(Sender: TObject; const AStreamId: Int64; const AData: string)
begin
Memo1.Lines.Add(Format('stream %d: %s', [AStreamId, AData]));
end;
vQUIC.Active := True;
end;
O cliente e o servidor compartilham o mesmo modelo de conexão, stream e datagrama nos dois lados. A matriz completa de recursos →
O TsgcHTTP3Server fala HTTP/3 sobre QUIC em uma porta UDP, enquanto um pareamento no estilo TsgcHTTP3ServerBridge com um servidor HTTP/2 existente deixa os clientes legados continuarem funcionando sobre TCP. Anuncie Alt-Svc e os clientes modernos se atualizam sozinhos.
uses
sgcHTTP3_Server;
procedure TForm1.FormCreate(Sender: TObject);
begin
FServer := TsgcHTTP3Server.Create(nil);
FServer.Port := 443;
FServer.QUICOptions.SSLOptions.CertFile := 'server.crt';
FServer.QUICOptions.SSLOptions.KeyFile := 'server.key';
// One handler for every incoming HTTP/3 request
FServer.OnH3Request :=
procedure(const Ctx: TsgcHTTP3Context)
begin
if Ctx.Path = '/pets/42' then
Ctx.RespondJSON(200, '{"name":"Rex"}')
else
Ctx.Respond(404, 'Not found');
end;
FServer.Active := True;
end;
Um único componente Delphi que encerra o QUIC, negocia h3 e roteia cada requisição para um manipulador, com o mesmo certificado que o seu servidor HTTP/2 já carrega.
Uma resposta HTTP/2 comum carrega um cabeçalho Alt-Svc: h3=":443". Os clientes que o entendem abrem QUIC na próxima requisição, sem redirecionamento ou um segundo domínio.
Uma requisição Extended CONNECT atualiza um stream para WebTransport, dando a um cliente de navegador streams bidirecionais e datagramas ao lado das requisições HTTP/3 comuns.
O handshake de QUIC e TLS 1.3 roda no próprio mecanismo QUIC do OpenSSL 3.5. Não há nenhuma biblioteca QUIC separada para compilar ou distribuir.
O sgcQUIC é um complemento do sgcWebSockets Enterprise, então a licença, o canal de suporte e o ritmo de atualizações são os mesmos que você já tem.
O sgcQUIC é uma das nove bibliotecas de componentes da eSeGeCe para Delphi, C++ Builder e .NET. Elas compartilham convenções, vêm com código-fonte completo e são implantadas sem royalties.
Transporte QUIC bruto e um cliente e servidor HTTP/3, com WebTransport. Um complemento do sgcWebSockets Enterprise.
Saiba mais →WebSocket, HTTP/2, MQTT, AMQP, WebRTC, IA e 30+ integrações de API. A licença Enterprise sobre a qual o sgcQUIC é construído.
Saiba mais →Componentes HTML e de UI server-side sobre Bootstrap 5 e htmx. Sirva a UI renderizada pelo mesmo transporte HTTP/3.
Saiba mais →Componentes de IA, LLM e MCP para Delphi e C++ Builder. Sete provedores de LLM por trás de um único componente, além de MCP, embeddings e fala. Produto autônomo, com o runtime sgcWebSockets Core incluído.
Saiba mais →Componentes cliente de MQTT, AMQP 0.9.1 e 1.0, Apache Kafka e STOMP para Delphi e C++ Builder. Produto autônomo, com o runtime sgcWebSockets Core incluído.
Saiba mais →Cliente OAuth2, cliente JWT e suporte a WebAuthn para Delphi e C++ Builder. Faça login com qualquer provedor OAuth2/OIDC, emita e verifique JWTs, e adicione autenticação por passkey a aplicativos nativos. Produto autônomo, com o runtime sgcWebSockets Core incluído.
Saiba mais →Cliente HTTP/2, cliente gRPC e clientes Google Cloud Pub/Sub, Calendar e FCM para Delphi e C++ Builder. Produto autônomo, com o runtime sgcWebSockets Core incluído.
Saiba mais →Servidor REST, servidor OpenAPI e componentes cliente OpenAPI para Delphi e C++ Builder. Publique APIs REST a partir de um contrato OpenAPI 3.x, ou consuma qualquer API descrita em OpenAPI. Produto autônomo, com o runtime sgcWebSockets Core incluído.
Saiba mais →Analisador OpenAPI 3.x, gerador nativo de SDK Pascal, componente servidor OpenAPI e mais de 1.195 SDKs de nuvem pré-compilados.
Saiba mais →XAdES, PAdES, CAdES e ASiC para documentos, Authenticode, ClickOnce, NuGet e VSIX para código.
Saiba mais →Windows Hello, sensores de impressão digital e o Windows Biometric Framework para Delphi e C++ Builder.
Saiba mais →Componentes Indy TCP/IP atualizados com TLS moderno, IPv6 e HTTP/2, do Delphi 7 ao 13.
Saiba mais →Confiado por desenvolvedores Delphi, C++ Builder, Lazarus e .NET ao redor do mundo.
A biblioteca sgcWebSockets de vocês é muito útil e fácil de configurar. Continuem com o ótimo trabalho!
O sgcWebSockets é incrível e o suporte de vocês é o melhor!
Muito obrigado pela ajuda e pelo suporte, eu adoro os componentes de vocês.