Skip to content
mobius1qwe edited this page Nov 13, 2026 · 1 revision

Home > Motor AdvancedHTTP 🚧

Motor AdvancedHTTP (experimental)

Important

Em desenvolvimento (2.0) e experimental. Não use em produção. A biblioteca por baixo tem defeitos conhecidos no Windows (veja abaixo).

Vale para a 2.0 · só Lazarus com FPC 3.3.1 ou mais novo · Nível: avançado

Em uma frase: servidor HTTP/1.1 sobre a biblioteca AdvancedHTTPServer (epoll no Linux, IOCP no Windows), para quem já roda o FPC de desenvolvimento (trunk).

Você vai precisar: o pacote AdvancedHTTPRAL (advancedhttpral.lpk), o código-fonte da AdvancedHTTPServer (a pasta src) no caminho de unidades e o FPC 3.3.1 ou mais novo: a biblioteca usa funções anônimas. Em qualquer outro compilador a unit do motor compila vazia (o símbolo RALHasAnonMethods não existe) e o componente não aparece.

Defeitos conhecidos da biblioteca no Windows

São da biblioteca, não do RAL, e foram observados no Windows; o Linux não foi verificado.

Defeito Efeito
requisições em keep-alive travam a segunda requisição da mesma conexão pode ficar esperando
o corpo da resposta se perde em TLS HTTPS devolve a resposta sem corpo
corpo de requisição em chunked derruba o processo Transfer-Encoding: chunked na ida não é seguro

Além disso, o desempenho é baixo (cerca de 2 mil pedidos por segundo no Windows), e a resposta em fluxo sobre TLS no Windows sai inteira (o motor não a faz ao vivo).

Servidor: TRALAdvancedHTTPServer

uses RALAdvancedHTTPServer;

Servidor := TRALAdvancedHTTPServer.Create(Self);
Servidor.Port := 8080;
Servidor.CreateRoute('ping', Tratador.Ping);
Servidor.Active := True;
propriedade padrão
PoolCount 0 threads do laço de eventos e do grupo de tratadores (mínimo duas); 0 = uma por processador
ConnectionTimeout 30 segundos que uma conexão em keep-alive pode ficar parada
MaxBodySize 32 MB maior corpo de requisição; acima disso, a biblioteca responde 413
TcpNoDelay verdadeiro liga TCP_NODELAY nas conexões (a biblioteca não liga e responde em dois envios)
SSL desligado CertFile e KeyFile em PEM, a chave sem senha

Só um servidor ativo por processo: a biblioteca guarda a bandeira de parada numa variável global. Ativar um segundo levanta uma exceção. Para trocar de porta, pare o primeiro antes.

Cliente

Não há cliente AdvancedHTTP. Use o fpHTTP (EngineType := 'fpHTTP') ou outro motor de cliente.

Quando usar

Para experimentar. Para um servidor no Lazarus de verdade, use o fpHTTP ou o mORMot2.

Erros comuns

O que acontece Causa O que fazer
o componente não existe FPC abaixo do 3.3.1 use o FPC 3.3.1+ ou outro motor
exceção ao ativar o segundo servidor um servidor por processo pare o primeiro
HTTPS responde sem corpo no Windows defeito da biblioteca use o Linux, ou outro motor
a conexão trava na segunda requisição no Windows defeito de keep-alive da biblioteca feche a conexão a cada pedido, ou use outro motor

Veja também

Começar

Servidor

MQTT 🚧

E-mail 🚧

Chatbot 🚧

Cliente

Motores

Avançado

Ajuda

🚧 = em desenvolvimento, pode mudar

Clone this wiki locally