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

Home > Motor XSocket 🚧

Motor XSocket (Delphi-Cross-Socket)

Important

Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Vale para a 2.0 · só Delphi 11 ou mais novo, Windows e Linux · Nível: intermediário

Em uma frase: servidor e cliente HTTP/1.1 assíncronos sobre a biblioteca Delphi-Cross-Socket (IOCP no Windows, epoll no Linux), com HTTPS pelo OpenSSL dela.

Você vai precisar: o pacote XSocketRAL, o código-fonte da Delphi-Cross-Socket no caminho de bibliotecas do Delphi (as pastas Net, Utils e DelphiToFPC) e, para HTTPS, o OpenSSL 3.

Note

A biblioteca não compila no Delphi 10.4 nem em versões abaixo do 11, e não existe para o Lazarus. Use uma cópia limpa dela: edições soltas na sua cópia de trabalho quebram a compilação.

Servidor: TRALXSocketServer

uses RALXSocketServer;

Servidor := TRALXSocketServer.Create(Self);
Servidor.Port := 8080;
Servidor.CreateRoute('ping', Tratador.Ping);
Servidor.Active := True;

HTTPS, com o certificado em arquivos PEM (ou em texto PEM, em CertPEM e KeyPEM):

Servidor.SSL.CertFile := 'cert.pem';
Servidor.SSL.KeyFile := 'key.pem';             // sem senha: a biblioteca não aceita chave protegida
Servidor.SSL.Enabled := True;
propriedade padrão
IoThreads 0 threads de entrada e saída da biblioteca; 0 = duas por processador, mais uma
ExecuteInIOThread falso executa o pedido na própria thread de E/S, sem passar a um trabalhador
PoolCount 0 threads trabalhadoras que executam os pedidos; 0 = quatro por processador; sem efeito com ExecuteInIOThread
SSL desligado CertFile/KeyFile ou CertPEM/KeyPEM; sem senha de chave

ExecuteInIOThread é um pouco mais rápido para tratadores curtos, mas um tratador que bloqueia (banco, chamada a outro servidor) ou que faz fluxo segura a thread de E/S, e toda conexão dela espera. Deixe falso se há rotas lentas.

O motor também entrega resposta em fluxo ao vivo (em pedaços, com Transfer-Encoding: chunked).

Cliente: EngineType := 'XSocket'

uses RALXSocketClient;

Cliente.EngineType := 'XSocket';
Cliente.BaseURL.Text := 'http://servidor:8080';
  • Mantém a conexão aberta entre as chamadas (keep-alive).
  • Descomprime sozinho corpo gzip/deflate; formulários, cookies, cabeçalhos e RequestTimeout funcionam como nos outros motores.
  • Não confere o certificado do servidor e não tem pin: com SSL.Verify := svAlways a chamada é recusada (rteCertificate), em vez de aceitar sem conferir. Com svNever conecta.
  • Não segue redirecionamentos.
  • Não entrega a resposta em fluxo: o corpo chega inteiro e os eventos de fluxo recebem tudo no fim.

Limites

  • HEAD fecha a conexão depois da resposta.
  • Uma resposta com status >= 400 também fecha a conexão.
  • Respostas ao vivo (fluxo) simultâneas: no máximo IoThreads - 1; as demais são respondidas inteiras.
  • Só HTTP/1.1: sem HTTP/2 e sem Upgrade.

Quando usar

Você quer Use
muitas conexões abertas no Delphi 11+, sem uma thread por conexão este motor
servidor assíncrono sem depender do mORMot2 este motor
máxima vazão de pedidos curtos o mORMot2 com smAsync rende bem mais (Qual motor escolher?)
cliente que confere o certificado ou segue redirecionamento outro motor (Indy, netHTTP, mORMot2)
Delphi 10.4 ou anterior, ou Lazarus outro motor

Erros comuns

O que acontece Causa O que fazer
não compila (Net.CrossSocket.Base não encontrada) a biblioteca não está no caminho do Delphi adicione as pastas Net, Utils e DelphiToFPC
não compila no 10.4 a biblioteca pede o Delphi 11 use outro motor
HTTPS não sobe falta o OpenSSL 3, ou CertFile/KeyFile errados, ou chave com senha confira as DLLs/.so, os caminhos e gere a chave sem senha
cliente recusa o certificado com svAlways o motor não confere certificado use svNever em teste, ou outro motor
tudo trava com ExecuteInIOThread tratador lento segura a thread de E/S desligue a opção

Veja também

Começar

Servidor

MQTT 🚧

E-mail 🚧

Chatbot 🚧

Cliente

Motores

Avançado

Ajuda

🚧 = em desenvolvimento, pode mudar

Clone this wiki locally