Crie daemons multiprocessos de PHP robustos e estáveis sem o código da caldeira. A classe de daemon central lida com o loop e eventos principais e pode ser executada em qualquer frequência desejada (dentro dos limites do PHP) . Você só precisa implementar um único método execute para executar um processo Daemon, opcionalmente em segundo plano.
Usando tarefas e trabalhadores, o daemon pode chamar métodos em processos de fundo sem problemas sem se preocupar em gerenciar crianças bifurcadas. Os plugins permitem criar um código reutilizável e compartilhável para seus daemons. Veja a seção Recursos abaixo para obter mais informações.
Obviamente, escrever daemons robustos, estáveis e de longa duração no PHP geralmente não é uma boa ideia. É pelo menos muito difícil de fazer e se sair bem. Pessoalmente, eu precisava de um daemon no PHP, porque tinha uma estrutura inteira de site construída em Symfony, que precisava de um grande daemon de back-end. Eu queria poder reutilizar todas as minhas dependências e entidades de front-end sem duplicar recursos ou configurações.
Enquanto esta biblioteca faz tudo o que pode para permitir que você crie um daemon sólido de rocha, o cuidado ainda deve ser tomado em seu código de terra para manter as coisas estáveis.
Veja o wiki para documentação.
Consulte o diretório Exemplos para obter exemplos que você pode executar.
Main Loop é mantido pela classe da doseon Core. Tudo o que você precisa fazer é implementar um método execute que será chamado de cada ciclo de loop. A frequência do loop pode ser qualquer valor fracionário em segundos. Se definido como 0, seu método execute será chamado o mais rápido possível ( normalmente não é recomendado, a menos que seu loop esteja fazendo algum tipo de chamada de bloqueio, ou seja: ouvindo em um soquete, etc. ).Uma tarefa permite chamar qualquer método ou retorno de chamada em um processo em segundo plano. Nenhuma comunicação é feita entre o processo de segundo plano e o pai. As tarefas são destinadas a coisas simples, por exemplo: enviando um email.
Um trabalhador permite que você chame qualquer método em um objeto, ou mesmo apenas um simples retorno de chamada como uma tarefa. Os trabalhadores podem devolver um valor de volta aos pais por meio de uma declaração return simples em seus métodos (s) de trabalhadores. Os trabalhadores são mantidos automaticamente e podem ter vários filhos correndo ao mesmo tempo, o que é tratado de forma transparente. Mesmo que um trabalhador morra ou seja morto pela API do SO, a API Daemon ainda retornará um resultado (ou exceção) ao seu código. O valor de retorno de um trabalhador geralmente é um objeto Promise . Você pode usar os métodos de promessa padrão como then ou otherwise para agir no valor de retorno. Ou você pode registrar um retorno de chamada ON_RETURN no trabalhador.
Os trabalhadores usam um padrão de design do mediador e usam memória compartilhada para a fila de mensagens e dados. Diferentes classes do IPC podem ser criadas para fornecer métodos de comunicação alternativos entre os pais e os filhos. Eu posso trabalhar em uma segunda classe IPC que usa soquetes em vez de SHM para fornecer uma opção alternativa .
Daemon Core tem vários eventos (consulte: eventos) com os quais você pode interface facilmente registrando um retorno de chamada. Alguns eventos têm os meios para mudar o comportamento do daemon.ON_SIGNAL no seu código. Seu retorno de chamada será passado um SignalEvent com o sinal que foi capturado.Plugin permite que você use e crie seus próprios plugins que podem ser injetados no daemon. Os plugins podem ser carregados preguiçosamente.FileLock de plug -in do núcleo permite adicionar um mecanismo de bloqueio para impedir que seu daemon execute mais de uma instância por vez. Basta registrar o plug -in em seu daemon e o restante é automático. Um ShmLock é semelhante, mas usa memória compartilhada para obter um bloqueio.Daemon possui 3 métodos básicos de registro: log , error , debug . Tudo isso gravará no arquivo de log (se configurado). Se o arquivo de log for girado, substituído ou excluído, o daemon detectará automaticamente isso e continuará a gravar no novo arquivo de log. O evento Daemonevent :: On_log permite registrar um retorno de chamada para alterar o comportamento também. O código do usuário pode usar o logtrait para adicionar facilmente o registro de daemon nativo ao seu código.A base para esta biblioteca foi inspirada na Biblioteca Php-Daemon de Shane Harter no Github. Infelizmente, sua biblioteca foi abandonada (ou está em hiato indefinido), foi escrito para o PHP V5.3, não tinha nome, nenhum gerenciamento de pacotes ou um carregador automático (ou seja: compositor).
Eu escolho criar uma biblioteca totalmente nova, em vez de marcar e modificar sua biblioteca original para fins educacionais. Eu também não concordo com algumas de suas metodologias. Eu preciso de algumas dependências extras, mas o Composer faz disso uma questão trivial.
_Esta biblioteca está em um estado totalmente funcional. Criei daemons muito complexos que funcionam por meses sem vazamentos de memória ou falha. Mais poderia ser feito ...