Skip to content
mobius1qwe edited this page Oct 29, 2026 · 8 revisions

Qual motor escolher?

Home > Qual motor escolher?

Em uma frase: o motor é quem conversa com a rede; o seu código é o mesmo em todos. Escolha pelo cenário abaixo e troque depois, se precisar, mudando duas linhas.

Note

As medições de desempenho estão sendo refeitas com um roteiro padronizado e entram aqui quando estiverem prontas.

Por cenário

Cenário Servidor Cliente Configuração recomendada
API na rede da empresa, Windows, dezenas de usuários Indy ou mORMot2 netHTTP (sem DLL) ou Indy o padrão de cada um
Delphi antigo (7 a 2007) mORMot2 mORMot2 —
API na internet atrás do nginx (HTTPS no nginx) mORMot2 — Mode := smAsync (1.2); servidor em http só para o nginx (nginx)
Muitas conexões abertas e paradas (apps que ficam conectados) mORMot2 — Mode := smAsync (1.2: conexão parada custa só o socket, não uma thread) e MaxConnections
Windows Server com HTTP/2 e certificado do Windows mORMot2 netHTTP com HTTPVersion := rhv2 Mode := smHttpSys (1.2, HTTP/2)
Rotas demoradas (consultas longas, chamadas a outros serviços) mORMot2 smThreads, Indy, ou Sagui com ThreadPerConnection (2.0 🚧) — DBWare com pool de conexões
Lazarus no Linux mORMot2 ou fpHTTP (fpHTTP não precisa de nada além do FPC) fpHTTP ou mORMot2 cthreads primeiro no uses
Hospedagem que só aceita CGI CGI — assistente, opção CGI
Sistema UniGUI UniGUI — o servidor é o do UniGUI
App Android consumindo API — netHTTP (simples) ou OkHttp 1.2 (HTTP/2, pin) ebMultiThread sempre (Android)
Rede ruim / celular trocando de Wi-Fi para 4G, RAL nos dois lados MsQuic 1.2 MsQuic ou Kwik 1.2 QUIC
Servidor dentro do celular MsQuic 1.2 (Android 9+) — Android
HTTPS sem preparar certificado qualquer um com HTTPS próprio — Certificado automático 2.0 🚧
Resposta aos pedaços (progresso, SSE, MCP) Indy, fpHTTP, Sagui ou mORMot2 smThreads Indy, fpHTTP ou mORMot2 Resposta em fluxo 2.0 🚧

Motores lado a lado

Motor Servidor Cliente Delphi Lazarus HTTPS próprio HTTP/2 Precisa instalar Fluxo 2.0 🚧
Indy sim sim sim sim sim (OpenSSL 1.0.2) não Indy 10.6.2+; DLLs do OpenSSL para HTTPS ao vivo
mORMot2 sim sim 2009+ sim sim (Windows: SChannel; Linux: OpenSSL) servidor smHttpSys mORMot2 smThreads
Sagui sim não 2009+ sim sim (libsagui com TLS) não libsagui (.dll/.so) ao vivo
fpHTTP sim sim não sim sim (OpenSSL) não nada (vem com o FPC); DLLs do OpenSSL para HTTPS ao vivo
NetHTTP não sim XE8+ não sim (do sistema) cliente, no Windows nada no fim
CGI sim não sim sim do servidor da frente não IIS, Apache ou nginx Lazarus
UniGUI sim não sim não do UniGUI não UniGUI no fim
MsQuic 1.2 sim sim sim sim obrigatório — (QUIC) msquic (.dll/.so) no fim
OkHttp 1.2 não Android sim não sim sim 2 jars no fim
Kwik 1.2 não Android 8+ sim não obrigatório — (QUIC) 5 jars no fim

Sobre threads (por que o cenário importa)

Motor / modo Como atende
Indy, mORMot2 smThreads uma thread por conexão aberta: simples; muitas conexões paradas = muitas threads
mORMot2 smAsync, smHttpSys (1.2) poucas threads atendem muitas conexões
Sagui grupo de threads (PoolCount), ou uma por conexão com ThreadPerConnection (2.0 🚧, padrão)
fpHTTP um pedido por conexão; grupo de threads reaproveitadas na 2.0 🚧

Para segurar picos sem cair, na 2.0 🚧: TRALConcurrencyPlugin.

Veja também

Clone this wiki locally