Características do Workerman

1. Desenvolvimento em PHP puro

Aplicações desenvolvidas com Workerman podem ser executadas de forma independente, sem depender de containers como php-fpm, apache ou nginx. Isso torna o desenvolvimento, a implantação e a depuração de aplicações muito conveniente para desenvolvedores PHP.

2. Suporte a múltiplos processos PHP

Para aproveitar ao máximo o desempenho de múltiplos CPUs no servidor, o Workerman suporta, por padrão, múltiplos processos e tarefas. O Workerman inicia um processo principal e vários processos filhos que oferecem serviços externamente; o processo principal é responsável por monitorar os processos filhos, enquanto os processos filhos escutam as conexões de rede por conta própria e recebem, enviam e processam dados. Devido ao modelo de processo simples, o Workerman é mais estável e eficiente.

3. Suporte a TCP e UDP

O Workerman suporta dois protocolos de transporte, TCP e UDP. Basta alterar um atributo para mudar o protocolo de transporte, sem que o código de negócios precise ser modificado.

4. Suporte a conexões persistentes

Muitas vezes, é necessário que aplicativos PHP mantenham conexões persistentes com o cliente, como em salas de bate-papo ou jogos. No entanto, é difícil para containers PHP tradicionais (apache, nginx, php-fpm) fazer isso. Com o Workerman, contanto que o serviço do servidor não chame ativamente a interface para fechar a conexão, é possível usar conexões longas em PHP. Um único processo do Workerman pode suportar milhares de conexões simultâneas, e múltiplos processos podem suportar dezenas ou até milhões de conexões simultâneas.

5. Suporte a vários protocolos de aplicação

O Workerman suporta uma variedade de protocolos de aplicação, incluindo protocolos personalizados. Mudar de protocolo no Workerman também é muito simples, apenas configurando um campo, o protocolo alternará automaticamente, e o código de negócios não precisará ser alterado. É até possível abrir várias portas com diferentes protocolos para atender às necessidades de diferentes clientes.

6. Suporte a alta concorrência

O Workerman suporta a biblioteca de polling de eventos Libevent (precisa da extensão event instalada). O uso do Event em alta concorrência com conexões persistentes oferece desempenho excelente. Se a extensão Event não estiver instalada, utiliza as chamadas de sistema Select incorporadas ao PHP, que também possuem desempenho notável.

7. Suporte a reinício suave do serviço

Quando é necessário reiniciar o serviço (por exemplo, ao lançar uma nova versão), não queremos que os processos que estão lidando com as solicitações dos usuários sejam encerrados imediatamente, nem queremos que o momento do reinício cause falhas na comunicação do cliente. O Workerman oferece a funcionalidade de reinício suave, garantindo que o serviço seja atualizado sem afetar o uso do cliente.

8. Suporte à detecção de atualização de arquivos e carregamento automático

Durante o desenvolvimento, desejamos que as alterações no código entrem em vigor imediatamente para que possamos ver os resultados. O Workerman fornece o FileMonitor componente de monitoramento de arquivos, que, assim que um arquivo é atualizado, o Workerman executará automaticamente o reload para carregar os novos arquivos e torná-los efetivos.

9. Suporte a execução de processos filhos com usuário especificado

Como os processos filhos são os que realmente lidam com as solicitações dos usuários, por razões de segurança, eles não devem ter permissões elevadas. Portanto, o Workerman permite configurar o usuário sob o qual os processos filhos são executados, tornando seu servidor mais seguro.

10. Suporte à persistência de objetos ou recursos

O Workerman carrega e analisa um arquivo PHP uma única vez durante a execução, mantendo-o em memória. Isso significa que declarações de classes e funções, ambiente de execução PHP, tabela de símbolos, etc., não serão criados e destruídos repetidamente, o que é completamente diferente do mecanismo PHP em containers web. No Workerman, membros estáticos ou variáveis globais permanecem disponíveis durante todo o ciclo de vida de um processo, desde que não sejam destruídos ativamente. Isso permite que objetos ou conexões sejam armazenados em variáveis globais ou membros estáticos de classe para reutilização em todas as solicitações durante o ciclo de vida do processo atual. Por exemplo, se uma conexão de banco de dados for inicializada uma única vez dentro de um processo, então todas as solicitações desse processo poderão reutilizar essa conexão, evitando o custo do handshake TCP três vezes, verificação de permissões do banco de dados e handshake TCP quatro vezes durante a desconexão, aumentando significativamente a eficiência da aplicação.

11. Alto desempenho

Como os arquivos PHP são lidos e analisados a partir do disco uma única vez e, em seguida, permanecem na memória, na próxima utilização, o opcode na memória é diretamente usado, o que reduz drasticamente a E/S do disco e processos demorados como inicialização de requisições, criação de ambiente de execução, análise lexical, análise sintática, compilação de opcode e fechamento de requisições. Além disso, não depende de containers como nginx ou apache, o que reduz a sobrecarga na comunicação entre nginx e PHP. O principal é que os recursos podem ser mantidos permanentemente, sem a necessidade de inicializar conexões de banco de dados novamente, tornando o desempenho ao desenvolver aplicações com Workerman extremamente alto.

12. Suporte a HHVM

Suporte para execução na máquina virtual HHVM, podendo aumentar o desempenho do PHP exponencialmente. Especialmente em negócios com cálculo intensivo de CPU, o desempenho é excepcional. Em testes de estresse práticos, foi observado que o Workerman, em execução sob HHVM, aumenta a taxa de transferência de rede em cerca de 30-80% em comparação com a execução sob Zend PHP5.6, sem carga de trabalho.

13. Suporte a implantações distribuídas

14. Suporte a execução como daemon

15. Suporte a escuta em múltiplas portas

16. Suporte a redirecionamento de entrada e saída padrão