Skip to content
mobius1qwe edited this page Oct 7, 2026 · 1 revision

Home > QUIC

QUIC (MsQuic e Kwik)

Important

Em desenvolvimento (1.2). Ainda não está numa versão lançada e pode mudar.

Em uma frase: um transporte mais novo que o TCP, bom para redes ruins e celular; no RAL ele liga um programa RAL a outro programa RAL.

O que ganha e o que perde

Ganha Perde
um pacote perdido atrasa só o pedido dele, não a conexão inteira só fala com RAL: navegador, curl, nginx e outras linguagens não entendem
conexão mais rápida de abrir sempre com certificado (não existe QUIC sem TLS)
a conexão sobrevive à troca de Wi-Fi para 4G precisa de uma biblioteca nativa (ou jars, no Kwik)

Note

Não é HTTP/3. O MsQuic dá o transporte; o RAL põe o seu próprio formato por cima. HTTP/3 está planejado.

Plataformas

Plataforma Servidor Cliente Biblioteca
Windows x64 e x86 TRALMsQuicServer 'MsQuic' msquic.dll ao lado do .exe
Linux x64 sim sim libmsquic.so.2 (não testado rodando)
Android 9+ sim 'MsQuic' libmsquic.so no APK (Android)
Android 8+ não 'Kwik' 5 jars, sem .so
macOS não não —

As bibliotecas testadas ficam no branch external do repositório, pasta msquic/. Tem de ser a versão OpenSSL do msquic: a versão SChannel só funciona no Windows 11 / Server 2022.

Exemplo

Servidor (o certificado é obrigatório; faça um com Criar certificado ou use o certificado automático da 1.3 🚧):

uses RALMsQuicServer;

Servidor := TRALMsQuicServer.Create(nil);
Servidor.Port := 8100;
Servidor.SSL.CertificateFile := 'cert.pem';
Servidor.SSL.PrivateKeyFile  := 'key.pem';
Servidor.CreateRoute('ping', Ping);
Servidor.Active := True;

Cliente:

uses RALClient, RALConsts, RALMsQuicClient;

Cliente.EngineType := ENGINEMSQUIC;                  // 'MsQuic'
Cliente.BaseURL.Text := 'https://192.168.1.10:8100';
Cliente.SSL.Pins.Add('AB:CD:...');                   // certificado autoassinado: ver HTTPS no cliente
Propriedade Lado O que faz
PoolCount servidor quantas threads atendem (padrão 1; aumente se a rota espera banco)
Migration servidor a conexão sobrevive à troca de rede (ligado)
KeepAliveInterval os dois mantém a conexão viva num NAT
ShareConnection cliente clientes iguais dividem uma conexão (ligado)

Erros comuns

O que acontece Causa O que fazer
erro ao carregar a biblioteca msquic.dll ausente, de 32/64 bits errado, ou versão SChannel a versão OpenSSL, da mesma arquitetura do programa
o servidor não sobe faltam CertificateFile/PrivateKeyFile QUIC exige certificado
curl ou navegador não conectam QUIC do RAL só fala com RAL use outro motor para eles

Manual completo (inglês): src/engine/msquic/README.md e src/engine/kwik/README.md.

Veja também

Clone this wiki locally