Servidor EPOLL

Um acceptor epoll do Linux para alta simultaneidade. Trate milhares de conexões no servidor sgcWebSockets usando um pool limitado de threads em vez de uma thread por conexão, como o Indy faz por padrão.

EPOLL I/O Handler

Um modo de E/S de alto desempenho para servidores baseados em Indy no Linux. Habilite o epoll no servidor padrão por meio da propriedade IOHandlerOptions e escale muito além do modelo de uma thread por conexão.

Classe do componente

TsgcWebSocketServer / TsgcWebSocketHTTPServer — habilitado via IOHandlerOptions

Mecanismo

Acceptor epoll do Linux em pool de threads — apenas Linux

Plataformas

Linux

Edição

Enterprise

Defina o tipo de IOHandler, pronto

Selecione iohEPOLL na propriedade IOHandlerOptions de um servidor Indy para mudar do modelo de threads padrão para o pool de threads do epoll.

Server.IOHandlerOptions.IOHandlerType := iohEPOLL;
Server.IOHandlerOptions.EPOLL.EPOLLThreads := 0;
Server.IOHandlerOptions.EPOLL.WorkOpThreads := 0;
Server->IOHandlerOptions->IOHandlerType = iohEPOLL;
Server->IOHandlerOptions->EPOLL->EPOLLThreads = 0;
Server->IOHandlerOptions->EPOLL->WorkOpThreads = 0;
Server.IOHandlerOptions.IOHandlerType = iohEPOLL;
Server.IOHandlerOptions.EPOLL.EPOLLThreads = 0;
Server.IOHandlerOptions.EPOLL.WorkOpThreads = 0;

O que está incluído

Como o pool de threads do epoll funciona e como ajustá-lo para a sua carga de trabalho.

E/S em pool de threads

Trate milhares de conexões usando um pool limitado de threads em vez de uma thread por conexão. As requisições assíncronas (overlapped) são despachadas pelo pool, em vez de dedicar uma thread a cada socket.

EPOLLThreads

Threads usadas para as requisições assíncronas do EPOLL. O valor padrão 0 significa que a contagem é calculada a partir do número de processadores. No Delphi 7 e 2007 o padrão é 32 porque o cpucount não é suportado. Ajuste manualmente quando necessário.

WorkOpThreads

Por padrão, cada requisição de uma conexão pode rodar em uma thread diferente do pool. Defina WorkOpThreads para fixar cada conexão na mesma thread. Isso impacta o desempenho, então defina um valor maior que zero apenas quando você precisar desse recurso.

Quando usar

Recomendado quando você precisa tratar milhares de conexões. Se o seu servidor trata no máximo cerca de 100 conexões simultâneas, você pode permanecer com o modelo de threads padrão do Indy.

Detecção de desconexão

O EPOLL detecta um socket morto apenas na escrita. Para disparar OnDisconnect, habilite CleanDisconnect := True no TsgcWebSocketClient, ou habilite um heartbeat no lado do servidor que faça ping nos clientes periodicamente.

Limite de conexões do Linux

Aumente o limite de descritores de arquivo abertos para elevar o número de conexões abertas simultâneas. ulimit -n 10000 define o número máximo de descritores de arquivo abertos para 10000.

Especificações & referências

Fontes autoritativas para o mecanismo do qual este modo depende.

Documentação & Demos

Acesse direto a ajuda online, baixe o projeto de demonstração pronto para rodar e leia o manual completo.

Ajuda online — EPOLL Referência completa do recurso com exemplos de código para Delphi, C++ Builder e .NET.
Projeto de demonstração — Demos\Server Projeto de exemplo pronto para rodar. Acompanha o pacote sgcWebSockets — baixe a versão de avaliação abaixo.
Manual do usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca.

Escale para milhares de conexões no Linux

Baixe a versão de avaliação gratuita e mude o seu servidor Delphi para o pool de threads epoll do Linux.