Cree demonios multiprocesos de PHP robustos y estables sin el código de Boilerplate. La clase Core Daemon maneja el bucle principal y los eventos y puede ejecutarse a cualquier frecuencia deseada (dentro de los límites de PHP) . Solo tiene que implementar un solo método execute para ejecutar un proceso de demonio, opcionalmente en segundo plano.
Usando tareas y trabajadores, el demonio puede llamar a los métodos en los procesos de fondo sin preocuparse por la gestión de niños bifurcados. Los complementos le permiten crear fácilmente un código reutilizable y compartible para sus demonios. Consulte la sección de características a continuación para obtener más información.
Obviamente, escribir demonios robustos, estables y de larga duración en PHP generalmente no es una buena idea. Es al menos muy difícil de hacer y le va bien. Personalmente necesitaba un demonio en PHP porque tenía un marco de sitio web completo integrado en Symfony que necesitaba un importante demonio de fondo. Quería poder reutilizar todas mis dependencias y entidades front-end sin duplicar recursos o configuraciones.
Si bien esta biblioteca hace todo lo posible para permitirle crear un demonio sólido como una roca, el cuidado aún debe tomarse en su código de tierra de usuario para mantener las cosas estables.
Vea el wiki para la documentación.
Vea el directorio de ejemplos para ver ejemplos que pueda ejecutar.
Main Loop se mantiene mediante la clase Core Daemon. Todo lo que tiene que hacer es implementar un método execute que se llame cada ciclo de bucle. La frecuencia de bucle puede ser cualquier valor fraccional en segundos. Si se establece en 0, su método execute se llamará lo más rápido posible ( no se recomienda normalmente, a menos que su bucle esté haciendo algún tipo de llamada de bloqueo, es decir: escuchar en un enchufe, etc. ).Una tarea le permite llamar a cualquier método o devolución de llamada en un proceso de fondo. No se realiza comunicación entre el proceso de fondo y el padre. Las tareas están destinadas a cosas simples, por ejemplo: enviar un correo electrónico.
Un trabajador le permite llamar a cualquier método en un objeto, o incluso una simple devolución de llamada como una tarea. Los trabajadores pueden devolver un valor al padre a través de una declaración return simple en su (s) método (s) de trabajadores. Los trabajadores se mantienen automáticamente y pueden tener varios niños que funcionan al mismo tiempo, que se maneja de manera transparente. Incluso si un trabajador muere o es asesinado por el sistema operativo, la API de Daemon aún devolverá un resultado (o excepción) a su código. El valor de retorno de un trabajador suele ser un objeto Promise . Puede usar los métodos de promesa estándar como then o otherwise para actuar en el valor de retorno. O puede registrar una devolución de llamada ON_RETURN en el trabajador.
Los trabajadores usan un patrón de diseño de mediador y usan memoria compartida para su cola y datos de mensajería. Se pueden crear diferentes clases de IPC para proporcionar métodos de comunicación alternativos entre los padres y los hijos. Podría trabajar en una segunda clase IPC que usa enchufes en lugar de SHM para proporcionar una opción alternativa .
Daemon Core tiene varios eventos (ver: Eventos) con los que puede interactuar fácilmente registrando una devolución de llamada. Algunos eventos tienen los medios para cambiar el comportamiento del demonio.ON_SIGNAL en su código. Su devolución de llamada se pasará por un SignalEvent con la señal que fue atrapada.Plugin le permite usar y crear sus propios complementos que se pueden inyectar en el demonio. Los complementos se pueden cargar perezosamente.FileLock le permite agregar un mecanismo de bloqueo para evitar que su demonio ejecute más de una instancia a la vez. Simplemente registre el complemento en su demonio y el resto es automático. Un ShmLock es similar pero usa memoria compartida para obtener un bloqueo.Daemon tiene 3 métodos básicos de registro: log , error , debug . Todo esto escribirá en el archivo de registro (si está configurado). Si el archivo de registro se gira, se sobrescribe o elimina, el demonio detectará automáticamente esto y continuará escribiendo en el nuevo archivo de registro. El evento DaemoneVent :: ON_LOG le permite registrar una devolución de llamada para cambiar el comportamiento también. El código de usuario puede usar LogTrait para agregar fácilmente el registro de demonios nativos a su código.La base de esta biblioteca se inspiró en la biblioteca PHP-Demon de Shane Harter en Github. Desafortunadamente, su biblioteca fue abandonada (o está en pausa indefinida), fue escrita para PHP V5.3, no tenía una paliza de nombres, ninguna gestión de paquetes o un cargador automático (es decir: compositor).
Elijo crear una biblioteca completamente nueva en lugar de bifurcar y modificar su biblioteca original con fines educativos. Tampoco estaba de acuerdo con algunas de sus metodologías. Necesito algunas dependencias adicionales, pero el compositor hace que este sea un problema trivial.
_Esta biblioteca está en un estado de funcionamiento completamente. He creado demonios muy complejos que se han ejecutado durante meses sin fugas o fallas de memoria. Se podría hacer más ...