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.
| 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 🚧 |
| 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 |
| 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.
Wiki: android
Wiki: dbware
Wiki: desempenho
Wiki: http2
Wiki: quic