在没有样板代码的情况下创建强大而稳定的PHP多进程守护程序。核心守护程序类处理主循环和事件,并且可以以任何所需的频率运行(在PHP的范围内) 。您只需要实现单个方法execute即可在后台运行守护程序进程。
使用任务和工人,守护程序可以在背景过程上调用方法无缝,而不必担心管理分叉的孩子。插件允许您轻松为守护程序创建可重复使用的可共享代码。有关更多信息,请参见下面的功能部分。
显然,在PHP中写下健壮,稳定且长期的守护程序通常不是一个好主意。至少很难做得很好。我个人需要PHP中的守护程序,因为我建立了整个网站框架,需要主要的后端守护程序。我希望能够重复使用复制资源或配置的所有前端依赖关系和实体。
虽然该库竭尽所能让您创建一个岩石固体的守护程序,但仍必须在用户地代码中注意以保持稳定的情况。
请参阅Wiki以获取文档。
有关可以运行的示例,请参见示例目录。
Main Loop由核心守护程序类维护。您所要做的就是实现一个可以被execute每个循环周期的方法。循环频率可以是几秒钟内的任何分数值。如果设置为0,则您的execute方法将尽可能快地调用(通常不建议使用,除非您的循环进行某种阻止调用,即:在插座上聆听等)。任务允许您在背景过程中调用任何方法或回调。背景过程与父母之间没有进行通信。任务是针对简单的事情,例如:发送电子邮件。
工人允许您调用对象上的任何方法,甚至像任务一样简单的回调。工人可以通过您的工作者方法中的简单return语句将价值返回给父母。工人可以自动维护,并且可以同时让多个孩子跑步,这是透明处理的。即使工人死亡或被操作系统杀死,守护程序API仍然会将结果(或例外)归还给您的代码。工人的返回值通常是Promise对象。您可以使用then标准承诺方法或otherwise对返回值行动。或者,您可以在工作人员上注册一个ON_RETURN回调。
工人使用调解员设计模式,并使用共享内存进行消息队列和数据。可以创建不同的IPC类以提供父母和子女之间的替代通信方法。我可能会选择使用插座而不是SHM的第二个IPC类,以提供另一种选择。
Daemon有几个事件(请参阅:事件),您可以通过注册回调来轻松地与之接口。有些事件有能力改变守护程序的行为。ON_SIGNAL回调即可。您的回调将通过带有捕获的信号SignalEvent通过。Plugin架构允许您使用并创建可以注入守护程序的插件。插件可以懒惰地加载。FileLock允许您添加锁定机制,以防止守护程序一次运行多个实例。只需在守护程序中注册插件,其余的是自动的。 ShmLock相似,但使用共享内存来获得锁。Daemon有3种基本的记录方法: log , error , debug 。所有这些都会写入日志文件(如果配置)。如果日志文件被旋转,覆盖或删除,守护程序将自动检测到这一点,并将继续写入新的日志文件。 Daemonevent :: ON_LOG事件允许您注册回调以更改行为。用户代码可以使用日志文字轻松地将本机守护程序记录添加到其代码中。该图书馆的基础灵感来自Github上Shane Harter的PHP-Daemon库。不幸的是,他的图书馆被遗弃(或在无限期的中断)是为php v5.3编写的,没有名字领域,没有包装管理或自动加载器(即:作曲家)。
我选择创建一个全新的图书馆,而不是为了教育目的而分叉和修改其原始图书馆。我也不同意他的一些方法。我确实需要一些额外的依赖性,但是作曲家使这是一个琐碎的问题。
_这个图书馆处于完全工作状态。我创建了非常复杂的守护程序,这些守护程序已经运行了几个月,没有任何内存泄漏或崩溃。可以做更多...