crodas/worker

异步执行任务的一般类

dev-master 2014-10-29 19:10 UTC

This package is auto-updated.

Last update: 2024-09-12 18:30:49 UTC


README

PHP中异步执行队列作业的无队列方式。

这是一个进行中的项目,目前还不适合生产环境。

为什么?

为了提供一个在PHP中在后台运行事物的简单方法。任何执行I/O操作的事物都是潜在的后台运行候选者。发送电子邮件、调整图片大小、获取网站内容。

这个项目的想法是提供一个非常简单的接口来排队作业/任务。

所有任务都设计为异步运行

如何实现?

它创建了一个轻量级的PHP管理进程,负责创建/检查/终止“工作者”。想法是运行管理器并忘记它。

管理器应扩展/减少工作者(最多)的数量。

主要有两个类,分别是ClientServer

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) {
    
}