crodas/worker
异步执行任务的一般类
dev-master
2014-10-29 19:10 UTC
Requires
- crodas/cli: *
- crodas/notoj: *
- pda/pheanstalk: *
- symfony/process: *
- videlalvaro/php-amqplib: 2.2.*
This package is auto-updated.
Last update: 2024-09-12 18:30:49 UTC
README
PHP中异步执行队列作业的无队列方式。
这是一个进行中的项目,目前还不适合生产环境。
为什么?
为了提供一个在PHP中在后台运行事物的简单方法。任何执行I/O操作的事物都是潜在的后台运行候选者。发送电子邮件、调整图片大小、获取网站内容。
这个项目的想法是提供一个非常简单的接口来排队作业/任务。
所有任务都设计为异步运行
如何实现?
它创建了一个轻量级的PHP管理进程,负责创建/检查/终止“工作者”。想法是运行管理器并忘记它。
管理器应扩展/减少工作者(最多)的数量。
主要有两个类,分别是Client
和Server
。
require "vendor/autoload.php"; use crodas\Worker\Config; use crodas\Worker\Server; $config = new Config; $config->setEngine("gearman")->addDirectory("my-tasks/"); new Server($config)->serve();
Server
相当简单,设计成可以从控制台终端运行,而不是从Web服务器运行。
require "vendor/autoload.php"; use crodas\Worker\Config; use crodas\Worker\Client; $config = new Config; $config->setEngine("gearman"); $client = new Client; $client->push("do_something", ['arg1', 'arg2']); $client->push("do_something", ['arg4', 'arg3']);
Client
对象相当简单,它们推送任务并忘记它。注意,客户端的Config
对象没有addDirectory()
方法,这是因为客户端不需要知道工作者的代码位置。
最后,定义工作者非常简单。它们需要位于服务器可以通过addDirectory()
访问的目录中。它们需要是可调用的,这就足够了。
/** @Worker("do_something") */ function foobar($args) { }