Создайте надежные и стабильные многопроцессорные демоны PHP без кода шаблона. Класс Core Daemon обрабатывает основную петлю и события и может работать на любой желаемой частоте (в пределах PHP) . Вам нужно только реализовать один метод, чтобы execute процесс демона, необязательно в фоновом режиме.
Используя задачи и работники, Daemon может вызывать методы на фоновых процессах без беспокойства, не беспокоясь о управлении детьми. Плагины позволяют легко создавать многоразовый и общий код для ваших демонов. См. Раздел «Функции» ниже для получения дополнительной информации.
Очевидно, что написание надежных, стабильных и давних демонов в PHP, как правило, не очень хорошая идея. Это, по крайней мере, очень сложно сделать, и преуспеть. Лично мне нужен был демон в PHP, потому что у меня была целая структура веб-сайта, встроенная в Symfony, который нуждался в крупном движении демона. Я хотел иметь возможность повторно использовать все свои зависимости и объекты, без дублирования ресурсов или конфигураций.
В то время как эта библиотека делает все возможное, чтобы вы могли создать твердый камень, все равно необходимо позаботиться о вашем коде пользователей, чтобы сохранить стабильные вещи.
Смотрите вики для документации.
Смотрите каталог примеров для примеров, которые вы можете запустить.
Main Loop поддерживается классом ядра Daemon. Все, что вам нужно сделать, это реализовать один метод execute , который будет вызван каждым циклом цикла. Частота петли может быть любым дробным значением за несколько секунд. Если установить на 0, ваш метод execute будет вызвана как можно быстрее ( обычно не рекомендуется, если только ваш цикл не выполняет какой -то блокирующий вызов, то есть прослушивание в розетке и т. Д. ).Задача позволяет вам вызвать любой метод или обратный вызов в фоновом процессе. Между фоновым процессом и родителем не передается никакой связи. Например, задачи предназначены для простых вещей: отправка электронной почты.
Работник позволяет вам вызвать любой метод на объекте или даже просто простой обратный вызов, как задача. Работники могут вернуть ценность обратно родителю с помощью простого ответа return в вашем методе (ы) вашего работника. Рабочие поддерживаются автоматически и могут иметь несколько детей, работающих одновременно, что прозрачно обрабатывается. Даже если работник умирает или убит ОС, Daemon API все равно вернет результат (или исключение) в ваш код. Возвращающаяся стоимость работника, как правило, является объектом Promise . Вы можете использовать стандартные методы обещания, такие как then или otherwise чтобы действовать в соответствии с возвратной стоимостью. Или вы можете зарегистрировать обратный вызов ON_RETURN на работнике.
Рабочие используют шаблон проектирования посредников и используют общую память для очереди и данных об обмене сообщениями. Различные классы МПК могут быть созданы, чтобы обеспечить альтернативные методы связи между родителем и детьми. Я мог бы поработать над вторым классом IPC, который использует сокеты вместо SHM, чтобы обеспечить альтернативный выбор .
Daemon есть несколько событий (см. События), с которыми вы можете легко взаимодействовать, зарегистрировав обратный вызов. Некоторые события имеют средства для изменения поведения демона.ON_SIGNAL в вашем коде. Ваш обратный вызов будет передан SignalEvent с сигналом, который был пойман.Plugin позволяет использовать и создавать свои собственные плагины, которые могут быть введены в демон. Плагины могут быть лениво загружены.FileLock для основного плагина позволяет добавлять механизм блокировки, чтобы ваш демон не работал более одного экземпляра за раз. Просто зарегистрируйте плагин в вашем демона, а остальное автоматическое. ShmLock похож, но использует общую память для получения блокировки.Daemon имеет 3 основных метода ведения журнала: log , error , debug . Все это будет писать в файл журнала (если настроен). Если файл журнала повернут, перезаписан или удален, демон автоматически обнаружит это и будет продолжать писать в новый файл журнала. Событие daemonevent :: on_log позволяет зарегистрировать обратный вызов, чтобы изменить поведение. Код пользователя может использовать Logtrait, чтобы легко добавить нативный журнал Daemon в свой код.Основа для этой библиотеки была вдохновлена библиотекой PHP-Daemon от Шейна Хартера на GitHub. К сожалению, его библиотека была заброшена (или находится на неопределенном перерыве), была написана для PHP v5.3, не имела имен, нет управления пакетами или автозагрузки (т.е. композитор).
Я предпочитаю создать совершенно новую библиотеку вместо того, чтобы разбить и изменять его оригинальную библиотеку для образовательных целей. Я также не согласился с некоторыми из его методологий. Мне требуются дополнительные зависимости, но композитор делает это тривиальной проблемой.
_ Эта библиотека находится в полностью рабочем состоянии. Я создал очень сложные демоны, которые работали в течение нескольких месяцев без утечек памяти или сбоев. Можно сделать больше ...