Repository navigation
quic
Home > QUIC
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.
| 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.
| 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.
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) |
| 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.
Começar
Servidor
- Rotas e parâmetros
- Ler o pedido e responder
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar