Repository navigation
fastcgi
Home > Colocar no ar > FastCGI 🚧
Important
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Vale para a 2.0 · Delphi XE em diante e Lazarus/FPC 3.2 em diante · Nível: intermediário
Em uma frase: o TRALFastCGIServer é um motor que fala FastCGI em vez de HTTP: o
servidor web (nginx, Apache) cuida do HTTPS, dos arquivos e do HTTP/2, e passa os pedidos da API para
o seu programa, que fica vivo entre um pedido e outro (ao contrário do CGI).
Você vai precisar: os pacotes FastCGIRAL e RALNetPackage. O protocolo é do
próprio RAL, o mesmo no Delphi e no Lazarus.
uses RALFastCGIServer;
Servidor := TRALFastCGIServer.Create(Self);
Servidor.Port := 9000;
Servidor.CreateRoute('api/clientes', Clientes);
Servidor.Active := True;location /api/ {
include fastcgi_params;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_pass 127.0.0.1:9000;
fastcgi_keep_conn on; # a mesma conexão para vários pedidos
fastcgi_buffering off; # resposta em fluxo chega ao vivo
}ProxyPass "/api/" "fcgi://127.0.0.1:9000/api/" enablereuse=onO FastCGI do IIS só conversa com processos que ele mesmo inicia, por pipe, não com uma porta TCP. No IIS prefira a ISAPI, ou o RAL num motor HTTP atrás do ARR.
- o caminho vem de
REQUEST_URI(ouSCRIPT_NAME+PATH_INFO+QUERY_STRING), os cabeçalhos deHTTP_*, o IP deREMOTE_ADDR, HTTPS deHTTPS=on; -
FCGI_KEEP_CONN: a conexão fica aberta para o próximo pedido; sem ele, fecha ao fim do pedido; -
resposta em fluxo ao vivo (
Send,SendEvent); -
ABORT_REQUESTcancela um pedido cujo corpo ainda não chegou todo; -
MaxConnectionslimita as conexões do servidor web;ReadTimeouté quanto uma conexão pode ficar calada no meio de um pedido.
Só TCP por enquanto (o socket Unix fica para depois). Um pedido por vez em cada conexão
(FCGI_MPXS_CONNS = 0): o nginx abre mais conexões quando precisa.
- IIS e Apache (ISAPI, módulo)
- Atrás de um proxy
- Exemplo:
FastCGIExample(Delphi e Lazarus)
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Objetos no corpo 🚧
- Resposta em fluxo 🚧
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- Servidor SOAP 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
- Testes em memória 🚧
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
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